33

CI で AND OR mysql クエリを組み合わせたい。私はすでにこのスレッドを見ました: http://codeigniter.com/forums/viewthread/92818/。しかし、彼らはそこに正確な解決策を提供していません。

厳密に CI フレームワークを使用して次のクエリを作成するにはどうすればよいですか? (括弧なしでクエリを簡単に作成できますが、同じクエリではありません。)

SELECT * FROM `Persons` WHERE
LastName='Svendson' AND Age="12" AND
(FirstName='Tove' OR FirstName='Ola' OR Gender="M" OR Country="India") 

PS: これは意味をなさない場合でも、単なるサンプル クエリです。クエリの OR 部分全体を 1 つのwhere().

編集:基本的に、次の単純なクエリの実装が必要です:

SELECT * FROM `table` WHERE field1='value1' AND (field2='value2' OR field3='value3') 
4

9 に答える 9

49

CodeIgniter 3 には、まさにこの目的に役立つ新しいメソッドgroup_start() と group_end()があります。

return $this->db
     ->where('LastName', 'Svendson');
     ->where('Age', 12);
     ->group_start()
         ->where('FirstName','Tove')
         ->or_where('FirstName','Ola')
         ->or_where('Gender','M')
         ->or_where('Country','India')
     ->group_end()
     ->get('Persons')
     ->result();
于 2014-07-17T20:31:30.350 に答える
48

そしてこれはうまくいくでしょうか?

$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->where("(FirstName='Tove' OR FirstName='Ola' OR Gender='M' OR Country='India')", NULL, FALSE);
$query = $this->db->get('Persons');
return $query->result();
于 2012-06-15T19:17:14.680 に答える
4

codeigniter 3.0 フレームワークを使用すると、separate or where and where 操作で使用できる新しい機能があります。つまり、group by と group end です。

コードのような、

$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->group_start();
$this->db->or_where('FirstName','Tove');
$this->db->or_where('FirstName','Ola');
$this->db->or_where('Gender','M');
$this->db->or_where('Country','India');
$this->db->group_end();
$query = $this->db->get('Persons');
return $query->result();
于 2018-05-22T16:52:44.837 に答える
3

これを簡単に使用できます

$this->db->where("status","live")->or_where("status","dead");

あなたも使うことができます

$this->db->where("(status='live' OR status='dead')");
于 2017-01-08T19:49:03.400 に答える
1

現在、CI2 では、Database クラスを拡張し、メソッドのアクセス タイプを private から public/protected に変更しない限り、Database クラスの Query Builder メソッド ($this->db->_compile_select() ) にアクセスできません。これにより、機能が無効になります。サブクエリを構築するには、ActiveRecord クラスを使用して構築しようとしています。構築しようとしているようなサブクエリを作成する唯一の方法は、単に db query メソッドを使用することです

$table = $this->db->dbprefix('tablename');

$sql = "SELECT * FROM `{$table}` WHERE field1='?' AND (field2='?' OR field3='?') ";
$this->db->query($sql,array($field1,$field2,$field3));  

CI Subquerysでこれを行うことについてのブログ投稿がありましたが、それは古く、CI 1.7 Hope でのみ動作します。

于 2012-09-30T17:01:24.860 に答える
-3

クエリ自体は意味がありません。選択しているのは次のとおりです。

  • Tove Svendson、12歳
  • Ola Svendsen、12歳
  • Svendsonという名前の男性、12歳
  • Svendsonという名前のインド人、12歳

トーブは男の名前のように見えるので、性別を選択する必要はありません。オラは女の子の名前のように見えるので、性別を選択する必要がないだけでなく、意味がありません。クエリを実行すると、Svendsonという名前の12歳の男性、Svensonという名前のインドの12歳の男性、および12歳の場合はToveとOlaSvendsonが返されます。

()角かっこで囲んでみませんか?なんらかの理由でアクティブレコードでそれを達成したいですか?

于 2012-06-15T18:47:38.293 に答える