2017-03-13 16 views
0

以下のコードを使用して、指定された条件のレコードを取得してから、同じレコードのみを更新します。Codeigniter - 同じクエリでGetとUpdateを組み合わせる

$this->db->where('Parameter1', 'TRUE'); 
$query = $this->db->get('Messages'); 

$this->db->where('Parameter1', 'TRUE'); 
$this->db->set('Parameter1', 'FALSE'); 
$this->db->update('Messages'); 

これは動作しますが、()コマンドを使用して2回同じクエリを呼び出すと、サーバーの電源の無駄のように思えます。 get()コマンドでクエリをリセットしたり、updateコマンドで以前のレコードセットを使用したりすることはできますか?

+0

実際のコードを 'Parameter1'なしで追加するのは分かりません。そして、あなたは '$ query'の出力で何もしません。 –

+0

通常、モデル内の異なる関数を取得して更新します。あなたのコードセグメントで、私はあなたが更新したい同じレコードを得る理由を見つけることができません。あなたはもう少し詳しく説明できますか? –

+0

はい、ユーザーは、メッセージを格納しているテーブルからこれらの新しいメッセージを読み取っているため、そのメッセージが「読み取られた」という情報をそのテーブルに保存する必要があります。メッセージが新しい(TRUE)か、すでに読み込まれている(FALSE)場合、Parameter1は説明しています。 –

答えて

0

これは、あまりにも多くのリソースを浪費することを心配する必要があり、実際のSQLクエリでwhere句を実際に再利用することはできません。しかし、あなたが欲しいのであれば、少し洗練されたコードを取得するためにリファクタリングすることができます。

$unread = array('Parameter1'=>TRUE); 
$read = array('Parameter1'=> FALSE); 

$query = $this->db->get_where('Messages', $unread); 

$this->db->update('Messages', $read, $unread); 

注:あなたのコードで あなたパラメータ1がtrueに設定されているすべての要素を取得し、その後、falseにそれらの要素のすべての 1を変更。これはほぼ確実に望ましいことではありませんが、実際のアプリケーションのどこか別の場所で処理するのはおそらく問題です。