你如何从MYSQL正确编码JSON,为Highcharts做好准备

时间:2013-06-28 13:47:54

标签: php mysql json highcharts

我正在尝试做我认为相当简单的任务,但我正在做一个噩梦。 我想要一个从mysql结果生成的Highcharts条/样条曲线图。 我已经制作了许多基于单个结果的Highcharts,但我正在努力填充结果列中的整个系列。

首先,我有一个包含4个字段的mysql视图。密钥,日期,位置和评级

Example Data
Key             date          pos          rating
1026         2013-06-22        7            77.5
1021         2013-05-16        9            65.4
1019         2013-04-21        4            82.5
1002         2013-03-12        5            81.4

我试图在x轴上获取日期,将pos作为条形系列,并将其评定为样条系列。 在查看为什么我无法显示图表之后,我发现我需要事先使用JSON准备数据。这是我完全迷失的地方...... 我之前从未使用过JSON,也找不到任何可以使用mysql跟随的简单示例,所以有人可以帮忙。我敢肯定,只有大约10行代码可以解决这个问题:)

我尝试使用的查询是......

$sql = "SELECT key, date, pos, rating FROM results WHERE key=146";

我想我已经用这个

回应了一个JSON
<?php
$sql = "SELECT key, date, pos, rating FROM results WHERE key=146";   
$result = mysql_query($sql);
$json = array();
if(mysql_num_rows($result)){
while($row=mysql_fetch_row($result)){
$json['JSON_info'][]=$row;
}
}
mysql_close($worstat);
echo json_encode($json);
?>

这给了我以下输出,我认为它接近我需要的,但进一步阅读告诉我,我需要删除所有的语音标记......

{"JSON_info":[["146","2013-06-23","7","66.15"],["146","2013-06-09","4","77.12"],
["146","2013-05-05","6","81.95"],["146","2013-04-07","11","77.15"],["146","2012-12-
30","6","58.17"],["146","2012-12-09","5","42.58"],["146","2012-10-07","7","74.66"],["146","2012-
09-16","18","78.86"],["146","2012-09-16","17","79.87"],["146","2012-09-16","15","80.23"],
["146","2012-09-16","20","72.32"],["146","2012-08-12","9","57.58"],["146","2012-07-
01","19","80.09"],["146","2012-06-03","7","51.64"],["146","2012-06-02","8","81.37"],["146","2012-
04-01","10","80.66"],["146","2012-02-05","9","64.08"]]}

查看Highcharts的演示图表,我看到图表需要这样的数据......

series: [{
name: 'Rainfall',
color: '#4572A7',
type: 'column',
yAxis: 1,
data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
tooltip: {
valueSuffix: ' mm'
}

在我迷路之前,走向一个完全错误的方向,有人可以给我一些指示。

  1. 如何剥离语音标记?
  2. 如何删除用于结果过滤的不需要的键字段?
  3. 如何将其分配给图表系列?
  4. 不是它会有所帮助,但我的示例页面位于:http://www.kr3w.co.uk/WORStat_2/profile.php?TargetName=146它的第五张图表是不能打球

2 个答案:

答案 0 :(得分:0)

基本上,问题归结为不发送正确的数据类型。此外,您使用的是过时的mysql_*扩展程序,您应该考虑使用PDO。

产生问题的一行就是这一行:

while($row=mysql_fetch_row($result)){
    $json['JSON_info'][]=$row;
}

应该是什么:

$json['JSON_info'][] = array(
    (int)$row['Key'],
    $row['date'],
    (int)$row['pos'],
    (float)$row['rating']
);

这将使json_encode正确引用(或不引用)值。

答案 1 :(得分:0)

虽然我希望你现在已经知道了这一点,但上面的家伙大多是正确的,但他忽略了提到你需要改变

while($row=mysql_fetch_row($result)){

while($row=mysql_fetch_array($result)){

所以最终的代码是

while($row=mysql_fetch_array($result)){
    $json['JSON_info'][] = array(
    (int)$row['Key'],
    $row['date'],
    (int)$row['pos'],
    (float)$row['rating']
);