質問
ここに私のデータがあります:
id date
1 2009-01-01 10:15:23
2 2009-01-01 13:21:29
3 2009-01-02 01:03:13
4 2009-01-03 12:20:19
5 2009-01-03 13:01:06
やりたいことは、日付ごとにグループ化し、各日付の下にID番号をリストすることです。個別の日付値を取得してから、それらを循環させて、その日付に該当するエントリを取得する必要がありますか?これは効率的ですか?
だから私の出力は次のようになります:
2009-01-01
1
2
2009-01-02
3
2009-01-03
4
5
解決
$query = "SELECT DATE(date) as mydate, id FROM your_data_table ORDER BY mydate, id";
$result = $pdo->query($query);
$oldDate = false;
while ( list($date, $id) = $result->fetch(PDO::FETCH_NUM) ) {
if ( $oldDate != $date ) {
echo "$date\n$id\n";
$oldDate = $date;
} else {
echo "$id\n";
}
}
複数のクエリで実行する代わりに、すべてのデータを一度に取得するだけです。日付のみが必要な場合は、 ORDER BY
の前に WHERE
句を配置するだけです。
他のヒント
保存された日付には時間情報があり(列のタイプはDATETIMEまたはTIMESTAMP)、グループ化するには、タイムスパンの日付部分のみを抽出する必要があり、 DATE()関数。
所属していません StackOverflow