这是我的数据:
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号。我还想列出每个日期的ID数。
所以我的输出看起来像:
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";
}
}
答案 0 :(得分:1)
如果您不介意让DB完成所有工作,并且可能会解析结果,那么一个简单的方法是:
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
可能需要一些工作(没有测试过)。
答案 1 :(得分:0)
对于由MySQL自动完成的组总计,您需要使用ROLLUP
选项。但是,当从一个组切换到下一个组时,查询结果仍然需要一些客户端按摩才能正确显示相应的分区。
答案 2 :(得分:0)
你可以这样做:
$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";
}
}