php - 从 MySQL 中检索每日和每月总计以用于图表

标签 php mysql datetime chart.js

我有一个“订阅者”表,我想查询它并在图表中显示结果。

表中的记录都有自己的“创建”字段,这是一个日期时间。我希望显示设定时间段的查询结果,例如我想显示新订阅者总数:

  1. 过去 7 天,每天总计。
  2. 过去 30 天,每天总计。
  3. 过去 90 天,每天总计。
  4. 过去 12 个月,每月总计。

我的图表数据结构并不是我问题的真正关键,我只需要一个命名数组,键是天(或月),值是总数。

我的问题与实际的 SQL 查询有关。例如,对于这些天,我是否需要每天执行 1 个查询,并使用数据时间间隔获取每天的总数,或者是否有(我怀疑有)更有效的方法来执行此操作,显然我不想只为 3 个月的图表进行 90 次查询?

最佳答案

您可以使用函数 TIMESTAMPDIFF() ,例如:

SELECT TIMESTAMPDIFF(DAY, created, NOW()) AS days, COUNT(*) AS num
FROM subscribers
WHERE created > DATE_SUB(NOW(), INTERVAL 3 MONTH)
GROUP BY days 
ORDER BY days ASC

我刚刚在 200 万条记录表上运行了这个查询,速度很快。

如果您希望在 7、30、90 等天中爆炸天数,只需使用 PHP 即可。

关于php - 从 MySQL 中检索每日和每月总计以用于图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26177083/

相关文章:

php - 将出生日期添加到数据库

php - 用js连接db并隐藏元素

mysql - 非常小的 MySQL 表会忽略索引吗?

MySQL短路或

mysql - 如何在一列中选择两个条件

javascript - 从城市派生时区

MySQL查询问题。最后一个月的日期

php - 使用 Node.js/socket.io 和 php/mysql 的 Web 应用程序

php - 如何在php结果字符串中添加逗号

php - 如何从 PHP 的 DateTime::diff 中获取总天数?