Группировка по и отображение записей по дате и количеству просмотров - PullRequest
0 голосов
/ 28 февраля 2011

Вот мои данные:

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  - Count:2
1  
2   
2009-01-02  - Count:1
3  
2009-01-03  - Count:2
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";
    }
}

Ответы [ 3 ]

1 голос
/ 28 февраля 2011

Если вы не против, чтобы БД выполнила всю работу, и, возможно, проанализировали результат, простой способ сделать это:

SELECT DATE(date) as mydate, COUNT(id) as num, GROUP_CONCAT(id SEPARATOR ",") as ids
FROM your_data_table
GROUP BY DATE(date)
ORDER BY mydate

Возможно, нужна некоторая работа (еще не проверял).

0 голосов
/ 28 февраля 2011

вы можете сделать что-то вроде этого:

$query = "SELECT DATE(date) as mydate, id FROM your_data_table ORDER BY mydate, id";
$result = $pdo->query($query);

$datas = array();
while(list($date, $id) = $result->fetch(PDO::FETCH_NUM)) {
  if(! isset($datas[$date]) $datas[$date] = array();
  $datas[$date][] = $id;
}

foreach($datas as $date => $ids} {
    echo $date.' - Count: '.count($ids)."\n";
    foreach($ids as $id) {
        echo $id."\n";
    }
}
0 голосов
/ 28 февраля 2011

Для того чтобы итоговая группа автоматически выполнялась MySQL, вам нужно использовать опцию ROLLUP. Но результаты запроса все равно нуждаются в некотором массаже на стороне клиента для правильного отображения соответствующих делений при переключении с одной группы на другую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...