2012-04-24 101 views
0

我想統計每天創建圖表的帖子數量。我的問題是,因爲SQL在某些日子(計數爲0)中找不到結果,所以我缺少我需要用於圖表的行(因爲我想顯示沒有帖子的日子)。如何在while循環中回顯沒有結果的日子?

SELECT DATE(Date) AS Day, COUNT(*) AS COUNT 
FROM `Posts` 
GROUP By `Day` 
ORDER BY Date DESC 

while($row = mysql_fetch_array($result)) { 
    echo $row['Date'] . ": " . $row['Count']; 
    } 

由於循環不爲0的結果顯示天,如果週三沒有帖子中,我得到:monday-17-3: 5, tuesday-18-3: 2, thursday-20-3: 3。相反,我想填寫空白,以便得到類似於:wednesday-19-3: 0

我該如何迴應在循環中沒有結果的日子?

+0

嘗試在phpmyadmin中執行查詢。你的查詢結果是否有星期三? – 2012-04-24 04:43:21

+0

循環工作正常。這只是我需要添加幾天沒有結果的數組。我爲描述添加了更多信息。 – lisovaccaro 2012-04-24 04:47:47

回答

2

您可以通過日期表來執行此操作,執行OUTER JOIN,然後執行分組。這將爲您提供兩者之間的日期(免責聲明:我假設您的日期格式爲YYYY-MM-DD,否則您可能需要稍微調整JOIN語句。)。

SELECT A.Date AS Day, COUNT(Posts.Date) AS COUNT 
FROM 
    (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date 
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c 
) A 
LEFT OUTER JOIN `Posts` ON A.Date = `Posts`.`Date` 
WHERE A.Date >= DATE_ADD(CURDATE(), INTERVAL -15 DAY) 
GROUP BY A.Date 

對於日期表,我使用的方法根據下列職位:generate days from date range

+0

這幾乎是完美的,但在沒有結果的日子裏,我得到了1個結果,在結果爲1的日子裏,我也得到了1個結果。我試圖找出如何修復它 – lisovaccaro 2012-04-24 05:14:23

+0

糟糕,將COUNT(*)更改爲Posts.Date或Posts。*。另外,你得到1的原因可能是因爲連接並且沒有匹配A.Date = Post.Date。您的日期字段在帖子表中格式化的方式如何? – 2012-04-24 05:25:39

+0

謝謝,將COUNT()更改爲Posts.Date修復了問題。 – lisovaccaro 2012-04-24 05:47:59

0

使用循環經過連續的日期,使用類似的功能:

$date = strtotime(date("Y-m-d", strtotime($date)) . " +1 day"); 

對於每個週期,應用您的查詢結果。那麼你會有所有的日期。

相關問題