获取每日总观看次数,包括在没有记录的情况下留下“0次观看”

时间:2012-10-17 14:03:49

标签: php mysql date

我正在创建一个图表,我可以每天获取一定范围的总观看次数,或者只要它返回。

我遇到的问题是在某一天没有查看时填写默认数量0,有些日子一天可能绝对没有查看,所以我需要MySQL返回默认值0当没有找到时 - 我不知道该怎么做。

这是我用来获取一天总观看次数的查询:

SELECT DATE(FROM_UNIXTIME(v.date)) AS date_views,
       COUNT(v.view_id) AS total_views
FROM 
(
    views v
)
GROUP BY date_views
ORDER BY v.date DESC

我的结果会返回:

+------------+-------------+
| date_views | total_views |
+------------+-------------+
| 2012-10-17 |           2 |
| 2012-10-15 |           5 |
| 2012-10-14 |           1 |
| 2012-10-10 |           7 |
+------------+-------------+

但是,由于02012-10-162012-10-112012-10-12未包含在内,因此我希望返回2012-10-13的日期。{ / p>

所以,例如:

+------------+-------------+
| date_views | total_views |
+------------+-------------+
| 2012-10-17 |           2 |
| 2012-10-16 |           0 |
| 2012-10-15 |           5 |
| 2012-10-14 |           1 |
| 2012-10-13 |           0 |
| 2012-10-12 |           0 |
| 2012-10-11 |           0 |
| 2012-10-10 |           7 |
+------------+-------------+

将被退回。

如何处理?

2 个答案:

答案 0 :(得分:3)

几年前,当我这样做时,我创建了一个空数组,其中日期为关键字,默认值为0.然后我简单地循环显示结果,更改了我所拥有的那些日期的值。

for each($result as $row){
   $date_stats_array[$row['date']] = $row['value'];
}

答案 1 :(得分:1)

在这种情况下,我创建了一个临时表,我填写了你想要的所有日期。之后,您可以使用该表将原始查询加入。

要填写表格,您可以使用以下程序:

DROP PROCEDURE IF EXISTS filldates;
DELIMITER |
CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE)
BEGIN
  WHILE dateStart <= dateEnd DO
    INSERT INTO tablename (_date) VALUES (dateStart);
    SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
  END WHILE;
END;
|
DELIMITER ;
CALL filldates('2011-01-01','2011-12-31');

https://stackoverflow.com/a/10132142/375087提供