我正在尝试从 MySQL 数据库获取数据并将其呈现在 Highcharts 中。
这是我的询问:
$sth = mysqli_query($con, "
SELECT DateTime,max(T)
FROM alldata
WHERE DATE(DateTime) = CURDATE() - INTERVAL 1 DAY
GROUP BY hour(DateTime)
");
$rows = array();
$rows['name'] = 'Outside';
while ($r = mysqli_fetch_array($sth)) {
$rows['data'][] = $r['max(T)'];
}
$result = array();
array_push($result, $rows);
print json_encode($result, JSON_NUMERIC_CHECK);
json 输出缺少日期和时间
[{"name":"Outside","data":[17.5,16.3,15.6,15.1,14.4,14,14.1,16,18.5,21.7,24.1,26.9,28.3,29.6,30.6,31.1,31.8]}]
该图正确显示了除 x 轴上的日期时间之外的数据,我不知道如何修复它。
将查询更改为此,现在可以使用了。
感谢 wergeld 和 Yuri 的帮助。
$sth = mysqli_query($con,"
SELECT DateTime,max(T)
FROM davisvp
WHERE DATE(DateTime) = CURDATE()
GROUP BY hour(DateTime)
"
);
$result = array();
$result['name'] = 'temperature';
while($row = mysqli_fetch_array($sth))
{
$date = strtotime($row['DateTime']);
$maxt = 1 * $row['max(T)'];
$result1 = array();
array_push($result1,$date);
array_push($result1,$maxt);
$result['data'][] = $result1;
}
echo json_encode($result, JSON_NUMERIC_CHECK);
在 SQL 中完成所有工作——小时部分之后的日期时间截断以及转换为 js 时间戳、分组和排序。
那么 PHP 唯一要做的就是构建有效负载,然后将数值 JSON 编码为 int/float 类型值。
代码:(PHPize演示)
$sql = <<<SQL
SELECT UNIX_TIMESTAMP(DATE_FORMAT(DateTime, '%Y-%m-%d %H:00:00')) * 1000 h,
MAX(T)
FROM davisvp
WHERE DATE(DateTime) = CURDATE()
GROUP BY h
ORDER BY h
SQL;
echo json_encode(
[
'name' => 'temperature',
'data' => $con->query($sql)->fetch_all()
],
JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT
);
输出将类似于此 yatta-yatta'ed 输出:
{
"name": "temperature",
"data": [
[
1733184000000,
17.5
],
[
1733187600000,
16.3
],
...
]
}