[Codeigniter-users] ActiveRecord機能でor_where文を使えない

Back to archive index

小島健太郎 kojim****@gmail*****
2012年 7月 3日 (火) 22:25:57 JST


こんばんは。

ご回答ありがとうございます。


> この結果では、次の2つの文が実行されていないように見えます。
> これはなぜなのでしょうか? お心当たりありますか?

すみません、説明不足でしたが、dept_idとindex_nameは
検索ボックスに入力がなかったら、該当する$this->db->where文は
実行されないようにしておりました、
質問時は未入力で実行した結果を記載してしまいました。
紛らわしいことをしてすみません。


> また、使用したデータベースドライバーは何でしょうか?

データベースドライバは同じくMySQLです。
環境を詳しく申しますと、XAMPP for Windows version1.7.3より
Apache,MySQLを起動して使用しています。


明日会社にてもう一度orwhereを試してみたいと思います。

複雑なSQL文を書きたい場合はquery()を使えばよいのですね。
大変参考になりました。




2012年7月3日 21:06 戸田 広 <info****@sciss*****>:
> こんばんは、戸田です。
>
>
> On 2012/07/03, at 10:13, 小島健太郎 wrote:
>
>> モデルで下記のSQLを使用していますが
>> 最終行のorwhere分を追加すると、返される結果が0件となってしまいます。
>>
>> function getAll($index_no,$index_no_first,$index,$dept_id){
>>
>>  $this->db->select("*");
>>  $this->db->from("t_reply");
>>  $this->db->join("M_dept","T_reply.dept=M_dept.dept_id","left");
>>  $this->db->like("T_reply.index_no",$index_no,"after");
>>  $this->db->like("T_reply.index_name",$index);
>>  $this->db->where("T_reply.dept",$dept_id);
>>  $this->db->orwhere("T_reply.index_no_first",$index_no_first);//←問題の行
>>
>>  return $this->db->get();
>> }
>
> 1.7.3 の環境で、全く同じメソッドを持つモデルクラスを作って
> 試しに CLI で、MySQL データベースドライバーで実行しましたが、
> プロファイラーは次のようなSQL文を表示しました(見やすいよう整形しています)。
>
> ========================================
> SELECT
>         *
> FROM
>         (`t_reply`)
> LEFT JOIN
>         `M_dept`
>         ON
>         `T_reply`.`dept`=`M_dept`.`dept_id`
> WHERE
>         `T_reply`.`dept` = 1
>         OR
>         `T_reply`.`index_no_first` = '2'
>         AND
>         `T_reply`.`index_no` LIKE '2.5%'
>         AND
>         `T_reply`.`index_name` LIKE '%1%'
> ;
> ========================================
>
>> SELECT *
>> FROM (`t_reply`)
>> LEFT JOIN `M_dept` ON `T_reply`.`dept`=`M_dept`.`dept_id`
>> WHERE `T_reply`.`index_no_first` = '2'
>> AND  `T_reply`.`index_no`  LIKE '2.5%'
>
> この結果では、次の2つの文が実行されていないように見えます。
> これはなぜなのでしょうか? お心当たりありますか?
>>  $this->db->like("T_reply.index_name",$index);
>>  $this->db->where("T_reply.dept",$dept_id);
> また、使用したデータベースドライバーは何でしょうか?
>
>
> なお、orwhere() は or_where() に引数を渡すだけのエイリアスですので
> or_where() と同じ結果になります。
>
>
>> また、SQL文で微妙に括弧()を操作したいとき
>> 何か記述方法はあるのでしょうか?
>
> Active Record を使わないのでよろしければ、
> query() を使った方が手っ取り早いと思います。
>
>
>
> 以上です。
>




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