2012-08-02 42 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