Вот мои данные:
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
То, что я хотел бы сделать, это группировать по каждой дате, а затем перечислять номера идентификаторов ниже каждой даты. Должен ли я получать отдельные значения даты, а затем ездить по ним, чтобы получить записи, которые попадают на дату? это эффективно?
поэтому мой вывод будет выглядеть так:
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"; } }
Вместо того, чтобы делать это в нескольких запросах, вы просто извлекаете сразу все данные. Если вам нужны только некоторые даты, вы просто кладете предложение WHERE
перед ORDER BY
.
У ваших сохраненных дат есть информация о времени (тип столбца DATETIME или TIMESTAMP), для того чтобы сделать группу, вам нужно извлечь только часть даты в ваш временной интервал, вы можете использовать функцию DATE () .