web-dev-qa-db-ja.com

mysql AND OR Codeigniterのクエリを組み合わせて

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') 
_
30
gopi1410

そしてこれは動作しますか?

$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();
41
csotelo

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();
41
gadelat

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

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

あなたも使用できます

$this->db->where("(status='live' OR status='dead')");
3
Waseem shah

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();
3
Sherin Green

Query groupingを使用してみてください

それのためのリンク

http://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping

2
Jatin Raikwar

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();
2
Andy

現在、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でのみ動作します。

1
Shawn C