我在一个传感器项目中工作,许多传感器输出存储在mysql表中的数据。我用海图来可视化这些数据。
我的问题是,当我使用live模式时,每秒钟对数据库进行一次ajax调用,由于ajax调用只获取最新的数据,因此某些数据不会显示,而且在我从传感器推送数据到使用ajax获取数据的时间之间,某些点会被删除默认的同步。我试图手动同步,但失败了。
我在问是否有一个参数可以添加到我的sql查询中,以便只获取尚未读取的数据,就像这样,即使我在一秒钟内使用ajax调用推送3个数据,但在第二秒钟内我只获取未读取的数据,而不是最新的数据。
我不知道这个解决方案是否真的存在,我在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查询没有问题,我仍然得到我的数据,但是另一个表中的最后一行的点信息变为零!
知道吗?两个表应该如何连接?
多谢提前
最佳答案
您需要保留最后一点的最后检索时间。您可以将它保存在内存变量中,或者如果需要,可以将它保存在数据库表中以保持它。假设您将lastRetrieveTime保存在另一个名为lastPoint的表中。
然后在最后一个点之后检索点,您需要这样一个查询smtg
选择点id、点名称、点时间
从传感器信息,最后一点
地点时间>最后点。最后检索时间
按时间点排序
限制3
此查询将使您返回在应用程序中检索到的最后一个点之后收集的前3个点。如果删除LIMIT
选项,它将返回上次检索点之后检索到的所有点。检索完最后一个点后,只需更新last point表,以便它在记录中再次保留上次检索的时间。
干杯
关于php - 更新和读取事件之间的MySQL同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14535208/