2012-08-02 79 views
1

在MySQL中我有這個疑問:如何填寫缺少的日期範圍內

SELECT COUNT(*) AS `total` , DAYOFYEAR(FROM_UNIXTIME(unixtimeissued)) AS `dayOfYear` , YEAR(FROM_UNIXTIME(unixtimeissued)) AS `year` 
    FROM flex_information 
    WHERE unixtimeissued >= 'giventime' 
    GROUP BY dayOfYear, year 
    ORDER BY year, dayOfYear 
    LIMIT 0 , 300 

這工作,只是我無法找到一個方法來插入0計數,其中有特定日期沒有條目罰款。即如果'2012年6月13日'沒有條目,我希望它在該日期返回'總'0。

編輯:這個數據將被用於繪製折線圖,​​所以我將需要0個計數與日期配對,以便成功顯示一個精確的圖表 - 我可能在PHP中填寫零值,但是一個MySQL查詢系統密集程度要低得多。

我發現這個答案:MySQL how to fill missing dates in range?:我現在有一個'數字'表,但一直無法成功地適應我的查詢解決方案。我假設的一些簡寫語法讓我很難理解這些概念。

+0

你是什麼意思插入0計數?如果查詢返回的內容沒有任何內容可以插入 – Woot4Moo 2012-08-02 14:05:47

+0

MySQL是否有CTE或類似的東西?如果是這樣 - 查看這個解決方案http://codecorner.galanter.net/2011/08/29/tsql-filling-missing-date-range/(它是用TSQL方言完成的)。即使它不,我認爲你可以通過使用子查詢來適應解決方案 – 2012-08-02 14:09:15

+0

感謝您的快速響應。 @ Woot4Moo,我已經更新了我的問題,試圖澄清。現在清楚了嗎? – 2012-08-02 14:10:55

回答

0

通過上面的選擇,你會知道什麼時候發現零結果。所有需要發生的事情都是範圍的比較。例如,如果你得到以下記錄設置回:

ID  DATE 
1  JUN first  
2  JUN second 
3  JUN fifth 
4  JUN sixth 

這將是清楚的是JUN第三和第四JUN沒有條目,以便在默認情況下,他們將是零。應該可以通過函數找到這些值的範圍。

UPDATE

如果模式被修改,像這樣你可以得到解決此問題:

ID, DATE, COUNT 

通過跟蹤計數的則可能是數據庫有多少一應俱全。應該指出的是,如果將發生許多更新,隨着表的增長,該過程將變得耗時。

+0

我可以在PHP中做到這一點;不過,我不確定我如何在MySQL中做到這一點。我的代碼已經比PHP更重一些,而我希望在我的服務器上實現這一點,我希望通過使用MySQL專門用於此進程來獲取可接受的一組數據行,而無需進行遞歸檢查,從而優化了這一點。有沒有辦法在MySQL中做到這一點,我不知道?感謝這個答案! – 2012-08-02 14:27:39

+0

@LukeNathanielAbbott查看我的更新。用計數列修改模式可以解決問題。 – Woot4Moo 2012-08-02 14:30:50