Группировка по и отображение записей под датой
Вопрос
Вот мои данные:
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 () .