2011-05-24 82 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查詢來做到這一點 - 你會嘗試在表中不存在的日期上進行分組。

標準解決方法是製作一個臨時表,其中包含按順序排列的無日期範圍的日期範圍,並與您的表進行連接,然後照常進行計數/彙總。