我想创建一个每小时订单的折线图,这样我就可以很容易地看到它们是何时下的。但我很难把所有的数据都放在图表里。我想使用谷歌图表,因为我对它有一些熟悉,如果可能的话,我会避免使用第三方函数/类。
<script type="text/javascript">
// some more code here
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Time', 'Orders'],
['12:00', $orders12],
['13:00', $orders13],
['14:00', $orders14],
['15:00', $orders15],
// etc for every hour in the day
]);
// some more code here
</script>
while ($objectTime = $objDB->getObject($result_time)) {
/* PSUEDO CODE
if ($objectTime->entryDate) == [placed between 12:00 - 13:00]
$orders12++;
if ($objectTime->entryDate) == [placed between 13:00 - 14:00]
$orders13++;
*/
}
正如你所看到的,我不知道如何正确地创建正确的变量来构建图表。我是否应该每小时使用一个变量(就像现在一样),如果订单与该时间匹配,则递增?或者有更聪明/更好的方法吗?
如果您将数据放在数组中,如下所示:
$myData = array(array('Time', 'Orders'), array('12:00', 5), array('13:00', 10), array('14:00', 16));
然后您可以将其输出到如下的javascript:
var data = google.visualization.arrayToDataTable(<?php echo json_encode($myData, JSON_NUMERIC_CHECK); ?>);
我建议遵循Robin Heller的建议,使用SQL提供的工具为您完成繁重的工作。
您能做的最好的事情就是首先以合适的方式获取东西。例如,当使用MySQL 时
SELECT count(id) FROM `objects` WHERE timestamp < 12937 and timestamp > 12980
或者使用GROUP BY来进一步最小化的查询数量
SELECT count(id) FROM `objects` GROUP BY (timestampHour)
除此之外,如果您无论如何都需要整个数据集,那么为每个解决方案存储一个变量对我来说似乎是可以的,尽管使用Arrays更干净、更容易输出(foreach而不是echo对每个变量进行处理)