[Codeigniter-users] Active RecordでWHERE区にカッコを使用する場合

Back to archive index

kunitsuji tsuji****@m-s*****
2009年 6月 12日 (金) 19:05:12 JST


 kunitsujiです。

内田さん、こんにちは。

たぶん、3月あたりの

[Codeigniter-users] ふと気になったCIのアクティブレコード

このスレッドでの内容と同じ気がします。
相当困って適当にいろいろ試してみたらいけました。

CIのactive_recordの処理を細かく追いかけていませんが、

例のような記述をした場合、
whereに関する文字列を単純に結合しているだけに思われます。
つまり、
where()の中の記述で(が一つ多いとかそういうのはいっさい関係なく、
最終的にget()が呼ばれた時点で、
where()メソッドで呼び出された文字列をプロパティから呼び出して
文字を結合しているので、おかしい場合はそこでエラーが出るはずです。
なので、
下のような一見気持ち悪い記述でWHERE文字列を生成できるのだと思います。

予想。
$this->db->where("(table.columnA in ('1','2','3')");
これで、
まず、左にかっこがついた文字がwhereプロパティの配列に格納される
次に
$this->db->or_where("table.columnB in ('A','B','C'))");
これでwhereプロパティの配列の下にORとして右側にかっこがついたものが追加
される。
で最後の
$this->db->where("table.columnC", "X");
これでさらにANDで追加って感じでしょうか。

ソースを追えばわかるんですがね^^;そこまで見てませんが挙動はそういう感
じですね。


> kunitsuji様
>
>いつもお世話になります。内田です。
>
>ありがとうございました。
>
>試してみます。
>
>>  kunitsujiです。
>> 
>> $this->db->where("(table.columnA in ('1','2','3')");
>> $this->db->or_where("table.columnB in ('A','B','C'))");
>> $this->db->where("table.columnC", "X");
>> $this->db->get("table");
>> 
>> これでいけるかと思います。
>> テストしてませんが。
>> 
>> >お世話になります。内田と申します。
>> >
>> >Active Recordにて
>> >where句を以下のように生成したいのですが
>> >どのように記述したらよいかご存知でしょうか?
>> >
>> >SELECT *
>> > FROM (table) 
>> >WHERE 
>> > (
>> >  table.columnA IN ('1','2','3')
>> >  OR table.columnB IN ('A','B','C')
>> >  )
>> > AND table.columnC = 'X'
>> >
>> >WHERE区の中でカッコを使用したいのですが、
>> >Active Recordを使わずに自力でSQLを組み立てるしかないのでしょうか?
>> >
>> >
>> >よろしくお願いいたします。
>> >
>> >_______________________________________________
>> >Codeigniter-users mailing list
>> >Codei****@lists*****
>> >http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>> 
>> _______________________________________________
>> Codeigniter-users mailing list
>> Codei****@lists*****
>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>
>_______________________________________________
>Codeigniter-users mailing list
>Codei****@lists*****
>http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users




Codeigniter-users メーリングリストの案内
Back to archive index