mysql 数据库获取时间-温度值

标签 mysql datetime temperature

我需要你的帮助来以正确的方式构建我的数据库。

我需要存储我家不同房间的时间温度值 我想使用 DyGraph 来绘制数据集的图表。 我想实现不同的时间窗口:1小时,24小时,48小时, 1 周,....

我将以 15 分钟的间隔检测温度,因此每小时会有 4 个时间温度值。 每个房间都有一个 ID,因此时间-温度值将关联起来 到正确的房间。

我构建的表格非常简单:

----------------------------------
| ID |      DATE          | TEMP |
----------------------------------
| 1  |2014-04-30 00:00:00 | 18.6 |
----------------------------------
| 2  |2014-04-30 00:00:00 | 18.3 |
----------------------------------
| 3  |2014-04-30 00:00:00 | 18.3 |
----------------------------------
| 1  |2014-04-30 00:15:00 | 18.5 |
----------------------------------

出于某种奇怪的原因,当行数达到 500 左右时, 服务器变得非常慢。 另外,我有一个网页,我可以读取不同的温度 the rooms:此页面每 5 秒通过 AJAX 轮询一次服务器(因为它需要 要经常更新!),但是当表的行数 得到大约 500,它挂起。

我尝试拆分表格,为每个房间创建一个表格,然后创建一个 每个时间窗口的表,现在一切似乎都工作正常。

因为我不认为这是最好/最有效的组织方式 这个东西,我需要你的帮助来给它一个更好的结构。

我使用 PHP 脚本来检索我家所有房间的温度数据:

$query = "SELECT * FROM temperature t1 
          WHERE (id, date) IN 
          (SELECT id,MAX(date) FROM
          temperature t2 GROUP BY id)";

此查询允许我收集名为 $options 的数组中的温度值:

$result_set = mysql_query($query, $connection);             
while($rows = mysql_fetch_array($result_set)){
$options [] = $rows;
}

然后,我对数组进行 json 编码:

$j = json_encode($options);

并将其发送到ajax脚本,该脚本在网页上显示数据:

echo $j;

在ajax脚本中,我将数据保存在变量中,然后解析它:

var return_data = xhr.responseText;
var temperature = JSON.parse(return_data);

接下来我循环遍历数组以提取温度值并将其放在网页上的正确位置:

for(var j=0; j<temperature.length; j++){
  document.getElementById("TEMPArea" + j).innerHTML = temperature[j].temp + "&deg;C";
}

只要“温度”表中的行数小于 600 左右,此方法就可以正常工作:每 5 秒轮询一次不是问题。 超过600,页面刷新变慢,最终挂起并停止刷新。

编辑:现在,我正在使用 Windows 7 64 位、Apache、PHP 和 MySQL、4GB RAM 的虚拟机。您认为这可能是一个问题吗?

最佳答案

看来我的细节很差,所以我说的还有一些。

我使用 PHP 脚本来检索我家所有房间的温度数据:

$query = "SELECT * FROM temperature t1 
          WHERE (id, date) IN 
          (SELECT id,MAX(date) FROM
          temperature t2 GROUP BY id)";

此查询允许我收集名为 $options 的数组中的温度值:

$result_set = mysql_query($query, $connection);             
while($rows = mysql_fetch_array($result_set)){
$options [] = $rows;
}

然后,我对数组进行 json 编码:

$j = json_encode($options);

并将其发送到ajax脚本,该脚本在网页上显示数据:

echo $j;

在ajax脚本中,我将数据保存在变量中,然后解析它:

var return_data = xhr.responseText;
var temperature = JSON.parse(return_data);

接下来我循环遍历数组以提取温度值并将其放在网页上的正确位置:

for(var j=0; j<temperature.length; j++){
  document.getElementById("TEMPArea" + j).innerHTML = temperature[j].temp + "&deg;C";
}

正如我在第一条消息中所说,只要“温度”表中的行数少于 600 左右,这种方法就可以正常工作:每 5 秒轮询一次不是问题。 超过600,页面刷新变慢,最终挂起并停止刷新。

我不是专家,代码非常简单直接,所以我在检测原因时遇到问题。 再次感谢。

关于mysql 数据库获取时间-温度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23394046/

相关文章:

mysql - 同一张表三次连接查询

mysql - 什么存储系统用于实时消息传递?

php - SQL/PHP : Show top 3 most sold products from database

java - Joda 日期时间 : Capture Date time(UTC) and convert to byte/byte array

mysql - 在 Oracle 中查找时间时为 "day of month must be between 1 and last day of month"

android - 如何在android中获取设备的温度

c - int 产生接近正确的答案,但 float 只给出 -18.000

php - Facebook 架构和数据库 ID 的起始量为数万亿

javascript - JavaScript中有效的日期时间字符串是什么?

Python:使用树莓派将传感器数据推送到 xively 时出错 TypeError: __init__()