こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複数キーワードでのあいまい検索

 たびたびお世話になります。
 PHPファイルのテキストボックスに入力された文字列でテーブルを検索して結果を取得したいのですが、複数キーワードでのあいまい検索の扱いで困っています。
 例えばtitleというカラムにある「今日はいい天気です」という文を検索したい場合は、PHPからSQL文で「select * from table where title like '%天気%';」とやれば引っかかるのですが、では「今日 天気」でやった場合、また「いい 今日」で検索した場合も引っかかるようにしたいのです。
 PHPで文字列を代入してSQL文を作る形になるとは思うのですが、この場合、SQL文はどのように記述すればいいのでしょうか?

投稿日時 - 2007-11-13 16:32:39

QNo.3514688

困ってます

質問者が選んだベストアンサー

あいまい検索の場合、カラム名 LIKE '%キーワード%' ですね。
複数のキーワードを重ねる場合、ANDやORがあります。ANDは両方とも含む場合、ORはどちらかを含む場合です。
即ち、「今日 天気」のどちらかが含まれる場合は、
SELECT * FROM table WHERE ( title LIKE '%今日%' ) OR ( title LIKE '%天気%' );
というクエリを発行すれば良いです。()は無くても同じですが、条件を重ねる場合はあった方が見やすいかもしれません。

投稿日時 - 2007-11-13 16:40:38

お礼

回答ありがとうございます。
ANDは分かったのですが、構文が違っていました(汗)
これで何とかなりそうです。ありがとうございました。

投稿日時 - 2007-11-16 09:20:45

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

「title like '%天気%'」といった操作方法は、性能を出せない検索の仕方です。
それをorで繋ぐといったことは、性能を出したいシステムでは普通はやりません。
データ件数が1000件以下程度ならいいですが、数万件、数十万件になるなら、設計を見直した方がいいですよ。

投稿日時 - 2007-11-14 09:37:33

お礼

回答ありがとうございます。
もちろん、もっと効率のいい方法もあるのでしょうが、今回はデータ件数が百件前後と少ないことと、時間があまりないのでこの方法を取ることにしました。

投稿日時 - 2007-11-16 09:22:26

あなたにオススメの質問