3

ネストされたwhere句を取得する方法はありますか?例えば:

SELECT * FROM table WHERE (colA = 'valueA' AND colB = 'valueB') OR (colA = 'valueC' AND colB = 'valueD')

query私はこれを関数呼び出しに書き込むことができることを知っています。例:

$this->db->query("SELECT ...")

しかし、codeigniterでそれを行うための「適切な」方法があるかどうか疑問に思いました。例:

$this->db->where(array('colA'=>'valueA'), array('colB'=>valueB'))->or_where(array('colA'=>'valueC'), array('colB'=>'valueD'))

ありがとう

4

2 に答える 2

7

codeigniter 3で、今あります、アップデートを見てください! それを可能にする配列を使用したメソッド使用法のバリエーションは
ありません。where()これらの状況では、私は通常、次のように1つの長い文字列でパーツを作成します。

$this->db->where("
    (
    (colA = '".$this->db->escape($v0)."' and colB = '".$this->db->escape($v1)."') 
    or 
    (colA = '".$this->db->escape($v2)."' and colB = '".$this->db->escape($v3)."') 
    )
");

エスケープは、パラメーターが何であるか、または使用中の述語に応じて、 escape(自動検出を行う)escape_strまたは手動で実行できます。escape_like_str

Datamapperライブラリを使用するプロジェクトに参加している場合、これらの種類のクエリを作成するときにgroup_start()andメソッドを使用することを好みます。これらには、さまざまなフレーバーがあります。group_end()

アップデート

これで、クエリビルダーにグループ化メソッドを持つCodeigniter 3が追加され、 ->group_start()sとsを実行できるようになり->group_end()ました。

于 2012-08-13T19:14:55.950 に答える
-1

また、次のように試すことができます

$this->db->where(condition1);
$this->db->or_where(condition2);
于 2012-08-21T09:40:34.837 に答える