【发布时间】:2015-06-21 08:19:44
【问题描述】:
我想在时间序列折线图上显示用户输入的信息。 ChartJS 似乎是一种很好的免费方式来做到这一点。它需要一个日期数组,以及这些日期的值数组。
如果用户要求提供两个日期之间的数据,并按天分组。
在我的数据库中,我有一个表,每一行都有一个 UNIX 时间戳。我可以轻松调用特定日期的数据和分组,例如
SELECT some_metric
FROM tbl_example
WHERE date BETWEEN [start_ts] AND [end_ts]
GROUP BY DAY(FROM_UNIXTIME(date))
我还有一个函数可以将两个日期之间的天数组成一个数组。
现在的问题是用户在某些日子没有数据,所以我需要修改 MySQL 吐出的数组,以便某些日子有 0。
除了可怕的双重嵌套foreach 在任一数组中交叉检查日期之外,还有一种有效的方法来修复 MySQL 或 PHP 中的数据间隙吗?
更新:This 似乎是在 JavaScript 端处理时间序列数据间隙的一种可能解决方案。
更新:我想出了一个相对简单的 20 行 PHP 解决方案。它重新格式化 MySQL 吐出的值数组,并为每个日期对该数组进行if (isset(...)) 检查,然后为该日期添加 0。
到目前为止,它已经完成了几天的工作,但我必须更深入地研究它才能在几周和几个月内工作。
【问题讨论】:
-
这可以通过 mysql 通过为给定范围动态生成天数然后通过左连接表来完成。但是查询有些复杂。这是一个类似的stackoverflow.com/questions/23300303/…
-
这很聪明也很有趣。但正如您所说,仅用于填补数据空白就相当复杂。
-
我说很复杂,因为它看起来很复杂,但事实并非如此。如果您查看查询,它只会生成动态日期,然后进行左连接,因此它将填补不存在的空白在原始查询中。
-
只在应用层处理缺失的结果。