我想在时间序列折线图上显示用户输入的信息。 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。
到目前为止,它已经完成了几天的工作,但是我需要深入研究它能够工作数周和数月。
答案 0 :(得分:2)
我建议使用此方法为start_ts
和end_ts
之间的日期生成值:
Get a list of dates between two dates
然后UNION
与您的结果。
这样可以省去在php
...
如果您在SUM
上使用某些汇总(例如COUNT
,some_metric
),则可以生成一个名为some_metric
的新字段,其中包含生成的日期,NULL
1}}或0
值,无论这些日期的记录是否存在,聚合都是有效的。