php - 用于获取最近 30 天的每日数据的 MYSQL 查询计数,即使任何日期的数据都不存在

标签 php mysql

我有表:“订单”(order_id,order_processed_date)。我想要过去 30 天每天的订单数。如果任何日期有 0 个订单,那么它应该打印 0。

像这样:

total  | date
1      | 2018-10-20
0      | 2018-10-19
0      | 2018-10-18
0      | 2018-10-17
2      | 2018-10-16
0      | 2018-10-15
1      | 2018-10-14
0      | 2018-10-13
0      | 2018-10-12
1      | 2018-10-11
1      | 2018-10-10
5      | 2018-10-09
1      | 2018-10-08

等等,直到 2018-09-20。我已经在 stackoverflow 中搜索并得到了一些查询,但没有找到确切的解决方案。我使用以下查询得到结果,但它只有日期不为 0 订单的记录:

SELECT COUNT(order_id) AS total, DATE(order_processed_date) AS date
FROM orders 
WHERE order_processed_date BETWEEN '2018-09-20' AND '2018-10-20'
GROUP BY DATE(order_processed_date)
ORDER BY order_processed_date DESC

可以请有人帮我给我我需要的结果。

最佳答案

您可以尝试使用日历表,例如described here。 .基本上,这是一个包含有序日期列表的表格(如果您愿意,还可以添加额外的属性)。

您可以使用日历表来LEFT JOIN 您的订单,并使用GROUP BY 来获取结果,例如每月。

祝你好运。

关于php - 用于获取最近 30 天的每日数据的 MYSQL 查询计数,即使任何日期的数据都不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52905206/

相关文章:

php - 如何访问放置在站点根目录之外的文件?

php - 将 GET 变量从一个 Bash/PHP 脚本传递到另一个脚本

mysql - 如何回显mysql选择结果codeigniter

php - MYSQL/PHP 如何从日期减去 7 天?

mysql - 在 ubuntu 中安装 mysql 时遇到错误

php - 从 PHP 回显表单元素时未提交

php - ncurses_def_shell_mode() 和 ncurses_def_prog_mode() 究竟做了什么?

php - Apache "destroying"授权 header

mysql - MS Access - 在一份报告中使用多个查询

php - 将 'for loop' 值保存在数据库中