我在一个传感器项目中工作,许多传感器输出存储在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/

10-12 12:21
查看更多