1

我在一个传感器项目中工作,其中许多传感器输出存储在 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 行变为零!任何的想法 ?这两个表应该如何连接?

提前谢谢了

4

2 回答 2

1

您需要保留最后一个点的最后检索时间。您可以将其保存在内存变量中,或者如果您愿意,可以将其保存在数据库表中以持久保存它。假设您将 lastRetrievedTime 保存在另一个名为 lastPoint 的表中。

然后在最后一个点之后检索点,您需要像这样的查询 smtg

选择 point_id、point_name、point_time FROM sensors_info、lastPoint WHERE point_time > lastPoint.lastRetrievedTime ORDER BY point_time ASC LIMIT 3

此查询会将您在应用程序中检索到的最后一个点之后收集的前 3 个点变为您。如果您删除该LIMIT选项,它将返回您在最后一个检索点之后检索到的所有点。检索最后一个点后,您只需要更新 lastPoint 表,以便它再次将 lastRetrieved 时间保留在其记录中。

干杯

于 2013-01-26T09:54:27.787 回答
0

我使用了 2 个 cdbcreteria 一个来获取条件,另一个使用第一个 cdbcreteria 作为条件来获取mydata

最后我用这个代码用foreach语句更新另一个表中的时间

foreach ($sensors as $sensor)  {
 $lastPointId = 1;  
 $lastPoint = LastPoint::model()->findByPk($lastPointId);
 $lastPoint->last_point_info = $sensor->information_time;
 if ( ! $lastPoint->save()) {
throw new CException('Unable to save last point.');
}
}
于 2013-02-09T13:40:52.767 回答