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