php - MySql 选择并计算每天的数据数量 - 包括空日期

标签 php mysql sql database

如何按天从数据库中选择和分组数据,但也包括没有条目的日期。在这种情况下,该值将为 0。

如果无法使用 MySQL,也可以使用 PHP。

这是我目前拥有的:

SELECT DATE_FORMAT(date, '%Y-%m-%d') AS the_date
     , COUNT(*) AS count 
  FROM table 
 WHERE date BETWEEN DATE_FORMAT('2016-11-28', '%Y-%m-%d') AND DATE_FORMAT('2016-12-05', '%Y-%m-%d') 
 GROUP 
    BY the_date

最佳答案

在 PHP 中添加缺失的日期可能会更简单。在 MySQL 中,您需要从某个地方获取日期。通常,数据库有一个包含此信息的“日历”表。如果您有一个,那么类似这样的事情就可以满足您的要求:

SELECT DATE_FORMAT(c.date, '%Y-%m-%d') AS the_date, COUNT(t.date) AS count 
FROM Calendar c LEFT JOIN
     table t
     ON c.date = t.date
WHERE c.date BETWEEN '2014-11-28' AND '2014-12-05' -- MySQL recognizes strings in the format of YYYY-MM-DD as dates when needed
GROUP BY the_date;

如果你没有这样的表,你可以为查询创建一个表:

SELECT DATE_FORMAT(c.date, '%Y-%m-%d') AS the_date, COUNT(t.date) AS count 
FROM (SELECT date('2014-11-28') as date UNION ALL
      SELECT date('2014-11-29') as date UNION ALL
      SELECT date('2014-11-30') as date UNION ALL
      SELECT date('2014-12-01') as date UNION ALL
      SELECT date('2014-12-02') as date UNION ALL
      SELECT date('2014-12-03') as date UNION ALL
      SELECT date('2014-12-04') as date UNION ALL
      SELECT date('2014-12-05') as date 
     ) c LEFT JOIN
     table t
     ON c.date = t.date
GROUP BY the_date;

这适用于少量日期,但对于跨越数月或数年的范围来说效果不佳。

关于php - MySql 选择并计算每天的数据数量 - 包括空日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39436079/

相关文章:

mysql - 表示A表的id可以设置在B表的foo和bar列中时的Laravel模型

python - 使用multiprocessing访问mysql时,总是报如下错误,如何解决?

mysql - 统计表中的项目,涉及的表字段枚举类型

c# - 关于 UNION、INTERSECT 和 EXCEPT 的 SqlException

sql - MySQL,从一个字符串中查找另一个字符串中的单词

php - 将测验替代项保存为 JSON 字符串或单独的行?

php - 将 Ext Store 数据传递给 php

php - 使用 PHP 读取本地主机(WAMP 服务器)中的文本文件

php - date( ) 返回 1970-01-01

php - 如何在Tomcat上安装php和javabridge