我正在一个传感器项目中工作,其中许多传感器输出存储在mysql表中的数据。我正在使用高图表来可视化这些数据。
我的问题是当我使用实时模式时,每秒对我的数据库进行一次 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 查询没有问题,我仍然得到我的数据,但另一个表中last_point_info行更改为零!知道吗?两个表应该如何连接?
提前非常感谢
您需要保留最后一个点的上次检索时间。您可以将其保存在内存变量中,或者如果需要,可以将其保留在数据库表中以持久保存它。假设您将 lastRetrievedTime 保留在另一个名为 lastPoint 的表中。
然后检索点在最后一个点之后,你需要像这样查询 smtg
选择point_id、point_name point_time从sensors_info,最后点WHERE point_time> lastPoint.lastRetrievedTime按 point_time ASC 订购限制 3
此查询将转到您在应用程序中检索到的最后一个点之后收集的前 3 个点。如果删除LIMIT
选项,它将返回在上次检索的点之后检索到的所有点。检索最后一个点后,您只需要更新 lastPoint 表,以便它再次在其记录中保留上次检索时间。
干杯
我使用了 2 个 cdbcreteria 一个用于获取条件,另一个用于获取 mydata 使用第一个 cdbcreteria 作为这里的条件
最后,我用这个代码用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.');
}
}