如何在循环中回显没有结果的日子?

时间:2012-04-24 04:38:24

标签: php mysql

我想计算每天创建图表的帖子数量。我的问题是,由于SQL几天都没有找到结果(Count为0),我缺少图表所需的行(因为我想显示没有帖子的日子)。

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

如何回应循环中没有结果的日子?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用循环来完成连续日期,使用如下函数:

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

对于每个周期,请应用查询结果。然后你将拥有所有日期。