按给定日期的小时对数据库记录进行分组,并对 Highcharts 演示的结果进行 json 编码

问题描述 投票:0回答:2

我正在尝试从 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 轴上的日期时间之外的数据,我不知道如何修复它。

php mysql json group-by highcharts
2个回答
1
投票

将查询更改为此,现在可以使用了。

感谢 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);

0
投票

在 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
        ],
        ...
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.