【问题标题】:Get total views per day including leaving "0 views" for a day that has no record获取每天的总观看次数,包括在没有记录的一天留下“0 次观看”
【发布时间】:2012-10-07 19:38:06
【问题描述】:

我正在创建一个图表,我可以在其中获取某个范围内每天的总观看次数,或者只要它可以追溯到过去。

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

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

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 |
+------------+-------------+

但是,我想为它返回 0 缺少的日子,因为 2012-10-162012-10-112012-10-122012-10-13 不包括在内。

所以,例如:

+------------+-------------+
| 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 |
+------------+-------------+

将被退回。

如何处理?

【问题讨论】:

标签: php mysql date


【解决方案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

【讨论】:

    【解决方案2】:

    当我几年前这样做时,我创建了一个空数组,其中日期为键,默认值为 0。然后我简单地遍历结果 att 更改了我拥有的那些日期的值。

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

    【讨论】:

    • 所以你填写范围之间缺少的空白?对于有 30/31 天的月份,情况会怎样?
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2017-01-10
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多