首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在高架上绘制多个系列数据时出错

在高架上绘制多个系列数据时出错
EN

Stack Overflow用户
提问于 2013-07-18 06:54:27
回答 3查看 3.1K关注 0票数 1

有一个个人温度监控项目,将家里不同房间的所有温度记录到mysql数据库中,我几天前遇到了高架/图表,一直在玩它,但我似乎无法让它处理多个系列的数据。

如何将数据记录到表中;

日期时间<-(如: 2013-07-18 15:52:26)每个位置的每个传感器的时间不同

位置<-6的(休息室,厨房,餐厅,外面,主人,备用)

温度<-(例如。12.34)

mysql的记录是怎样的;2013-07-18 15:52:26 / master / 12.34

我已经成功地完成了对数据集的处理,但我不确定我需要做什么,以及如何格式化json和mysql查询,以便高级图表能够读取json/mysq数据,并在一张图上绘制所有6个位置的温度数据。

完整的代码;主要的高库存图表文件。http://pastebin.com/XWkThfc8 --这是从mysql数据库生成JSON的文件。http://pastebin.com/RXBFr24P

这是目前使用上述查询的一组数据的样子.1374593356000,17.31,1374593427000,17.25,1374593497000,17.31,1374593567000,17.31,1374593638000,17.31,1374593708000,17.25,1374593778000,17.25,1374593849000,17.25,1374593919000,17.25,1374593989000,17.25,1374594060000,17.25,1374594130000,17.25....etc

所以我的问题是;

改变这种情况的最佳方法是什么,这样它就可以绘制出所有的数据,目前它似乎不起作用;

代码语言:javascript
复制
mysql_select_db("mqtt", $con);

$return_arr = array();

$fetch = mysql_query("SELECT timeof, message FROM temperatures WHERE DATE(timeof) BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() AND locationmap = 'master'");
$i=0;
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
$rows[$i]=array(strtotime($row[timeof])*1000 ,(float)$row[message]);
$i++;
}

echo json_encode($rows);

对于多组数据,我假设它需要采用这种格式。

[{名称:‘厨房’,dat‌​a:[日期,临时,日期]},{名称:‘休息室’,dat‌​a:[日期,临时日期,日期,日期]}]

不确定如何更改我的查询,以便将所有位置的数据提取出来,然后正确编码。

更新-1

最新的代码,

代码语言:javascript
复制
$return_arr = array();

$fetch = mysql_query("SELECT timeof, locationmap AS location, message AS temp FROM temperatures WHERE DATE(timeof) BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND CURDATE() ORDER BY location, timeof ASC");
$i=0;
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
$rows[$i]=array(strtotime($row[timeof])*1000 ,(float)$row[temp],$row[location]);
$i++;
}

echo json_encode($rows);   

但是,它没有像上面提到的那样返回正确的格式。

就这样出来了。(很明显,这里有1000个整体。)

代码语言:javascript
复制
[1375272426000,22.63,"cupboard"],[1375272496000,22.69,"cupboard"],[1375272566000,22.75,"cupboard"],[1375272637000,22.75,"cupboard"],[1375272707000,22.69,"cupboard"],[1375272777000,22.63,"cupboard"],[1375106429000,17.69,"kitchen"],[1375106500000,17.69,"kitchen"],[1375106570000,17.63,"kitchen"],[1375106640000,17.63,"kitchen"],[1375106711000,17.63,"kitchen"],[1375106781000,17.63,"kitchen"],[1375106851000,17.63,"kitchen"],[1375106921000,17.56,"kitchen"],[1375106992000,17.56,"kitchen"],[1375107062000,17.56,"kitchen"],[1375107132000,17.56,"kitchen"],[1375107203000,17.56,"kitchen"],[1375107273000,17.5,"kitchen"],[1375107343000,17.5,"kitchen"],[1375107413000,17.5,"kitchen"]

我想我的问题现在是正确的!??只是需要一些帮助的json输出!

更新-2 Thx到高级图表论坛,这是我需要的格式,只是需要一些帮助的php/mysql方面.

代码语言:javascript
复制
[{
  name: 'kitchen',
  data: [
    [time, value],
    [time, value]
  ]
}, {
  name: 'attic',
  data: [
    [time, value],
    [time, value]
  ]
}]

UPDATE-3使它能够处理多个系列数据,不需要多次调用json脚本,而是将这两个文件放在GIST上,供任何有类似问题的人使用。

https://gist.github.com/matbor/8854385 https://gist.github.com/matbor/8853902

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-03 16:43:56

我认为最好的方法是遵循“比较演示”,让php代码只生成一个数组,具体取决于指定空间的url参数:

代码语言:javascript
复制
json.php?room=attic
json.php?room=cupboard

A你只输出房间的数据

然后,用以下方式调用单独的php文件:

代码语言:javascript
复制
names = ['attic', 'cupboard', '...'],

$.each(names, function(i, name) {

    $.getJSON('jsonp.php?room='+ name.toLowerCase() +'-c.json&callback=?',  function(data) {
...

但是老实说,我仍然在寻找一种避免多个http调用/sql查询的方法:-)特别是对于date1、value1、value1、value3、date2、value1、value1、value3等数据.

票数 1
EN

Stack Overflow用户

发布于 2013-07-18 13:44:18

是的,它应该是您所包含的格式,更多的日期应该是时间戳(时间以毫秒为单位)和临时需要数字值。

票数 1
EN

Stack Overflow用户

发布于 2019-03-13 10:27:36

我已经使用这个项目大约6个月了,我想我会分享一个小提示,其他人可能会发现方便。

一切都运行得很好,我在CentOS服务器上的MYSQL数据库中记录了5个raspberry pi的温度数据,但是突然之间它就坏了。该页面根本不会显示任何内容,但是在Network下的Firefox developer tools控制台中,我可以看到5个数据库查询中的3个导致了500个内部服务器错误。

这似乎很奇怪,因为我没有修改任何东西,一些疑难解答最终导致我使用httpd error_log。出现了一个php错误,指示内存分配的最大值已经耗尽。

PHP致命错误:允许内存在/var/www/html/温度/json_hs_tems.php中耗尽134217728字节(尝试分配757字节)

我在json_hs_temps.php文件中添加了下面的代码行,以将内存从默认的128 to增加到1Gb。

代码语言:javascript
复制
ini_set('memory_limit', '1024M');

这立即解决了这个问题,并再次良好地加载了图表。

此外,由于以下时区错误,httpd error_log也被吹出了大尺寸(千兆字节):

PHP警告: strtotime():依赖系统的时区设置是不安全的。您需要使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种,并且仍然收到此警告,则很可能拼写错了时区标识符。我们现在选择了时区'UTC‘,但是请设置date.timezone来选择您的时区。在第27行的/var/www/html/温度/json_hs_tems.php中,referer:multi.php

解决方案是将以下代码行添加到json_hs_temps.php文件中,以设置时区。

代码语言:javascript
复制
date_default_timezone_set("Australia/Hobart");

我认为这可能会发生在其他使用这段代码的人身上,所以我希望它能帮助到其他人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17716547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档