我在一个传感器项目中工作,其中许多传感器输出存储在 mysql 表中的数据。我正在使用 highcharts 可视化这些数据。
我的问题是当我使用实时模式时,每秒对我的数据库进行一次 ajax 调用,一些数据没有显示,因为 ajax 调用只获取最新的数据,一些点被丢弃推送来自传感器的数据以及使用 ajax 获取它们的时间。我尝试手动同步,但失败了。
我问是否有一个参数可以添加到我的 sql 查询中以仅获取尚未读取的数据,即使我在一秒钟内推送 3 个数据并在一秒钟内进行 ajax 调用也是如此我只得到未读数据而不是最新数据。
我不知道这个解决方案是否真的存在,我是 php 和 mysql 的新手,我只将它们用于研究目的,我需要最简单和最少的解决方案!
EDITI::使用 last_point_id 和 last_point_info 创建新表 last_point
我正在使用 yii 框架,我无法使用 yii 库进行更新查询 所以我用了这段代码
$modelSensor = SensorInfo2::model()->findBySql('SELECT * FROM information_sensors
where sensors_id= "'.$s['sensors_id'].'" ; ');
$sResult = array(intval($modelSensor->information_time ),intval($modelSensor-
>information_value ));
foreach ($modelSensor as $up) // for each value that I get from previous query
// I want to use it to
// update last_point table
{
$connection = yii::app()->db;
$sql = 'UPDATE last_point SET last_point_info =
"'.$up['information_time'].'"' ;
$command=$connection->createCommand($sql);
$command->execute();
}
$json = CJSON::encode($sResult);
echo $json ;
Yii::app()->end();
对于我的 ajax 查询没有问题,我仍然得到我的数据,但另一个表中的行 last_point_info 变为零! 任何想法 ?两个表应该如何连接?
提前致谢
最佳答案
您需要保留最后一个点的最后检索时间。您可以将其保存在内存变量中,或者如果您愿意,可以将其保存在数据库表中以持久保存。假设您将 lastRetrievedTime 保存在另一个名为 lastPoint 的表中。
然后要检索最后一个点之后的点,您需要这样的查询 smtg
SELECT point_id, point_name, point_time 来自 sensors_info,lastPoint WHERE point_time > lastPoint.lastRetrievedTime ORDER BY point_time ASC 排序 限制 3
此查询将为您提供您在应用程序中检索到的最后一个点之后收集的前 3 个点。如果您删除 LIMIT
选项,它将返回您在最后一个检索点之后检索到的所有点。检索最后一个点后,您只需更新 lastPoint 表,以便它再次在其记录中保留 lastRetrieved 时间。
干杯
关于php - 更新和读取事件之间的Mysql同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14535208/