AND OR CIでの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")
_
追伸:これは意味がない場合でも単なるサンプルクエリであり、単一のwhere()
内にクエリのOR部分全体を記述することを提案しないでください。
EDIT:基本的に、次の簡単なクエリの実装が必要です。
_SELECT * FROM `table` WHERE field1='value1' AND (field2='value2' OR field3='value3')
_
そしてこれは動作しますか?
$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();
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();
これを簡単に使用できます
$this->db->where("status","live")->or_where("status","dead");
あなたも使用できます
$this->db->where("(status='live' OR status='dead')");
codeigniter 3.0フレームワークを使用して、個別または場所と場所の操作に使用できる新しい機能があります。
コードのような、
$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();
Query grouping
を使用してみてください
それのためのリンク
http://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping
Codeigniterでは、このように簡単に理解できます。
$sql = "SELECT
*
FROM
`Persons`
WHERE
LastName = 'Svendson'
AND Age = '12'
AND (
FirstName = 'Tove'
OR FirstName = 'Ola'
OR Gender = 'M'
OR Country = 'India'
)";
$query = $this->db->query($sql);
return $query->result();
現在、CI2では、Databaseクラスを拡張し、メソッドのアクセスタイプをprivateからpublic/protectedに変更せずに、DatabaseクラスのQuery Builderメソッド($ this-> db-> _ compile_select())にアクセスできません。 ActiveRecordクラスを使用してビルドしようとしているようなサブクエリをビルドします。構築しようとしているようなサブクエリを作成する唯一の方法は、dbクエリメソッドを使用することです
$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でのみ動作します。