我有一个登录MySQL数据库的设备,我想从中读取几百行,并使用它创建一个Google图表。
我似乎找不到一种将MySQL时间戳数据转换为Google图表数据数组的timeofday列类型的好方法。
https://developers.google.com/chart/interactive/docs/datesandtimes
我已经开发了一个PHP,该PHP可以回显我希望的数据,但是我仍然使用MySQL或Unix时间戳格式。 PHP文件:
<?php
$mysqli = new mysqli("localhost", "readuser", "***", "***");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
/* Select queries return a resultset */
if ($result = $mysqli->query("SELECT ID, Timestamp, temp FROM temperature ORDER BY ID DESC LIMIT 5")) {
while($row = mysqli_fetch_assoc($result))
{
$dataset1[] = array($row['Timestamp'],$row['temp']);
}
/* encode array to JSON for JavaScript */
echo json_encode($dataset1);
/* free result set */
$result->close();
}
?>
上述php执行示例:
[
["2018-08-03 17:01:33","80.60"],
["2018-08-03 17:01:23","81.05"],
["2018-08-03 17:01:13","80.60"],
["2018-08-03 17:01:03","81.05"],
["2018-08-03 17:00:53","81.05"]
]
我认为Google图表希望看到的更像是
[
[[17, 01, 33],80.60],
[[17, 01, 23],81.05],
[[17, 01, 13],80.60],
[[17, 01, 03],81.50],
[[17, 00, 50],81.05]
]
这是数据将要进入的主要PHP文件(用ajax访问json数据php文件,并在setInterval处更新图表绘制):
<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['line']});
google.charts.setOnLoadCallback(drawChart);
/* declare variable for json data */
var chardata;
/* ajax to pull mysql data via php file */
function chartdataquery() {
jQuery.ajax({
url:'/mysql/chartdata.php',
type:'POST',
async: false,
dataType: 'json',
success:function (results) {
chartdata = (results);
}
});
};
/* Set the chartdata update frequency */
updatequeryInterval = setInterval(chartdataquery,10000);
/* drawing the chart at the setInterval duration, at the end of the function */
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('timeofday', 'Time');
data.addColumn('number', 'Temperature');
data.addRows(chartdata);
var options = {
chart: {
title: 'Temperature',
subtitle: 'updated every 10 seconds'
},
width: 900,
height: 500
};
var chart = new google.charts.Line(document.getElementById('linechart_material'));
chart.draw(data, google.charts.Line.convertOptions(options));
}
</script>
</head>
<body>
<div id="linechart_material" style="width: 900px; height: 500px"></div>
</body>
</html>
这是正确的吗,我可以使用MySQL查询或PHP或Javascript完成某些操作吗?我要使阵列的Google图表在一天中的时间符合我的最佳方法是什么?
谢谢!
答案 0 :(得分:0)
尝试像这样加载php数组...
while($row = mysqli_fetch_assoc($result))
{
$dataset1[] = array(array((int) date_format(new DateTime($row['Timestamp']), 'H'), (int) date_format(new DateTime($row['Timestamp']), 'i'), (int) date_format(new DateTime($row['Timestamp']), 's')),$row['temp']);
}
要使上述方法生效,您需要将google列类型更改为...
data.addColumn('timeofday', 'Time');
答案 1 :(得分:-1)
您应该能够使用$timestamp->format("")
重新格式化PHP中从SQL接收的时间戳。
在前缀中,您可以输入参数,我不知道所有这些参数,但是:
Y年
m个月
d天
然后在参数之间使用一些空格,例如
$timestamp->format("Y m d")
应该输出类似以下内容:
“ [2018 08 04]”