【问题标题】:Combine multiple timestamps to months in array - PHP将多个时间戳组合到数组中的月份 - PHP
【发布时间】:2021-05-17 08:42:10
【问题描述】:

我正在为每个站点调用分析收集时间戳。每个调用都是 MySQL 表中的一个新条目。为了在 JavaScript 图表中显示数据,我想将时间戳排序为月份并计算每月的调用次数。

生成的 PHP 数组应该是这样的

$calls = [
   "Jan" => [ 
       "calls" => 123
   ],
   "Mar" => [...]
]

如何按月对时间戳进行排序并统计每个月的调用次数?

$db->bind("pid",$user['PID']);

$calls = $db->query("SELECT MONTH(aufruf_time), count(*) 
FROM profile_analytics WHERE PID = :pid
GROUP BY MONTH(aufruf_time) 
ORDER BY aufruf_time");

【问题讨论】:

  • 你到底在问什么?如何在查询中获取这些数据?或者您是否已经有查询,但您需要重新构建结果?无论哪种方式,在编写问题时,您都应该提出一个明确的问题。现在,您只给出了预期结果的规范,没有任何上下文。
  • 我已经从数据库中收集了查询。我正在努力将数据处理为上述格式。
  • 1.问题:如何将时间戳分类为月份? 2. 问:如何统计每月的通话次数?
  • 如果可能,您应该按 MySQL 而非 PHP 代码库对数据进行排序,这在大多数情况下性能更高。然后遍历结果集并构建你的数组(这是最简单的部分)。
  • 如果您在minimal, reproducible example 中提供有关您的数据库结构的信息,也许我们可以在查询级别正确地帮助您执行此操作。如果您想在 PHP 中执行此操作,请分享您拥有的数组示例以及您尝试对数据进行分组的代码。您的问题中缺少重要的细节。

标签: php mysql timestamp


【解决方案1】:

也许这个 SQL 会起作用:

SELECT MONTH(your_timestamp_column), count(*) 
FROM your_table 
GROUP BY MONTH(your_timestamp_column) 
ORDER BY your_timestamp_column

它按月对呼叫计数进行分组(此处忽略年份)。然后你必须用 PHP 构建你的数组。请参阅MySQL doc 了解更多信息

【讨论】:

  • 查询错误。会产生错误“Unknown column 'callDate'”。
  • 这只是一个例子。我对原始数据库方案一无所知。你必须采用它。 callDatetimestamp 类型的列。
  • 更准确地说,我已将列名更改为your_timestamp_column
  • 这是我得到的Array ( [0] => Array ( [MONTH(aufruf_time)] => [count(*)] => 3 ) ) 我如何识别月份?喜欢四月
  • your_timestamp_column(和源表的另一列)在分组后不可用于排序 - 只能使用输出表达式..
猜你喜欢
  • 2014-05-31
  • 2022-10-08
  • 1970-01-01
  • 2019-07-17
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多