0

foreach ループ内に選択クエリとそれに続く更新クエリがあります。

選択からデータを取得でき、それをjsonとして使用してグラフを描画しますが、選択から同じデータで更新する必要がある他のテーブルの場合、指定されたフィールドが0になる場合があります1または2!!
更新に選択を使用しようとしましたが、問題ありません (更新 .... (選択 ....)) ですが、foreach 内では機能しません。他の列も使用しようとしましたが、同じ結果で、常に 0 になります。よろしくお願いします

これは私のコードです

public function actionGetSensorsDataLive($beamId) {
    header('Content-Type: application/json; charset="UTF-8"');
    $sensorsIds = Sensor::model()->findAllBySql('SELECT sensor_id FROM sensor where 
                             node_id="' . $beamId . '" and sensor_name = "I" ;');

    foreach ($sensorsIds as $s) {
        $sResult = array();
       $modelSensor = SensorInfo2::model()->findBySql('SELECT * FROM information_sensor  
             where sensor_id= "' . $s['sensor_id'] . '"');

        $sResult = array(($modelSensor->information_sensor_time),
            ($modelSensor->information_sensor_value));
        /////////////// update//////////////// 
        // for every information_sensor_time that I get from the previous query  
         //  I want
        //  to update a row in another table //

        foreach ($modelSensor as $up) {
            $connection = yii::app()->db;

            $sql = 'UPDATE last_point  SET last_point_time = "' . 
                             $up['information_sensor_time'] . '"
            WHERE sensor_id= "' . $s['sensor_id'] . '"  ';

            $command = $connection->createCommand($sql);
            $command->execute();
        }
        /////update end///////               
    }
    echo json_encode($sResult);
    Yii::app()->end();
}
4

3 に答える 3

0
 $sensorsIds=Sensor::model()->findAllBySql('SELECT sensor_id FROM lead where 
                         node_id="'.$beamId.'" and sensor_name = "I" ;' );

削除する;

 $sensorsIds=Sensor::model()->findAllBySql('SELECT sensor_id FROM lead where 
                         node_id="'.$beamId.'" and sensor_name = "I"' );

今これを試してみてください。

于 2013-01-29T11:40:46.040 に答える
0

最後に私はこのコードを使用しました

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-01-30T21:54:50.777 に答える
0

1 つのレコードのみを返す findBySql()` を使用していて、その上で foreach を実行しても意味がありません。そうチェン・ザ・ライン

 $modelSensor = SensorInfo2::model()->findBySql('SELECT * FROM information_sensor  
             where sensor_id= "' . $s['sensor_id'] . '"');

$modelSensor = SensorInfo2::model()->findAllBySql('SELECT * FROM information_sensor  
             where sensor_id= "' . $s['sensor_id'] . '"');

そして、アレックスが提案したように、はるかに安全なクエリビルダーを使用する必要があります

于 2013-01-29T17:35:32.033 に答える