2011-05-24 121 views
4

我想要计算上个月每天发生的数量事件,但在没有发现事件时还包括计数为零。那可能吗?如何在用MySQL GROUP BY表达式计数时包含零

这里是我从...开始

SELECT COUNT(*) AS count, 
DATE(usage_time_local) AS d 
FROM usages 
WHERE user_id=136 
AND DATE(usage_time_local) >= DATE('2011-04-24') 
AND DATE(usage_time_local) <= DATE('2011-05-24') 
GROUP BY DATE(usage_time_local); 

UPDATE:给出了答案,我通过初始化一个循环,然后在细节填充实现的代码解决方案。

$dailyCount = array(); 
    for($i=1; $i<=30; $i++) { 
     $day = date('Y-m-d',(time()-($i*24*60*60))); 
     $dailyCount[$day] = 0; 
    } 
    foreach($statement as $row) { 
    $dailyCount[$row['d']] = $row['count']; 
    } 
+0

我看到一篇很棒的文章,有人用一个函数的代码来快速返回一个没有任何循环的范围内的一组日期。搜索它并找不到它。这很复杂,所以如果性能不是问题,你可以使用一个循环来产生你想要的。 – Kendrick 2011-05-24 20:44:36

回答

8

你不能用标准的SQL查询来做到这一点 - 你会尝试在表中不存在的日期上进行分组。

标准解决方法是制作一个临时表,其中包含按顺序排列的无日期范围的日期范围,并与您的表进行连接,然后照常进行计数/汇总。