CakePHPで複数語句のlike検索を行う
2010/12/11 追記への指摘があったので修正
よく見たらできないとかできるとか嘘ついてました。
http://d.hatena.ne.jp/tenkoma/20101211
丁寧に検証までしてくれた方がいました。ありがとうございます。
=====
CakePHP1.2系でLike検索をする際に、
正気とは思えないけどよく見るとああなるほどという方法で実現できたのでメモしておきます。
CakePHPのlikeを利用する際に複数の語句を入力すると、
最後に代入した値で検索がされてしまいます。
指定したカラムの配列キーが最後に代入した値で上書きされてしまうので、
じゃあ、同じキーにしなきゃいいじゃんということでやってみたらうまくできました。
/*
実現した方法
Column1とlikeの間に半角スペースをいれて同キーになるのを回避する
*/
$search = array("and"=>
"Column1 like" => "keyword1",
"Column1 like" => "keyword2",
"Column1 like" => "keyword3",
);
$datas = $this->findAll($search);
find関係のソースどうなってるんだろ。
実際に出力されているSQLを見るとlike keyword and like keyword2の形になっているので
データ量が増えればレスポンスがやばいことになりそうな気がする。
できなかったやり方も一応のせておきます。
// できそうでできないその1
$search = array("and"=>
array("Column1 like ?" =>array("keyword1","keyword2"))
);
指摘箇所
できないとか嘘ついてました。ごめんなさい。
できそうでできないその2できそうでできなきゃこまるその2
$keys[0] = array("Column1 like" => $keyword1);
$keys[1] = array("Column1 like" => $keyword2);
$search = array("and"=>$keys);
2010/11/22 追記(できない!!)
よくよく考えたらコレでよかった
$search = array(“and”=>
“Column1 like” => “%keyword1%”,
“Column1 like” => “%keyword2%”
);
$this->hogehoge->find(‘all’,array(‘conditions’ => $search));
-
前の記事
今月のストレスチェック 2010.08.31
-
次の記事
むむむ。テスト投稿。 2010.08.31