- ベストアンサー
スペースによる絞り込み検索をSQL文だけで実現したい
単語がスペースで区切られている場合、 文字列を分割して配列に入れ foreachなどでANDを足していく方法が主流(?)なようなのですが、 これをSQL文だけで実現することは可能でしょうか? いろいろ調べたのですが、 SQL文にforなどの繰り返しがなさそうなのでむずかしいのかなと思っているのですが・・・ MATCHやAGAINSTを使って実現できますか? あるいはストアドプロシジャなどでも構わないのですが・・ 知識が乏しいので用語の使い方などもおかしなところがあるかと思いますが、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
もしかりに「鈴木 一郎」を分解して「%鈴木%」と「%一郎%」のANDを とったとしても、「鈴木一郎」のみをヒットさせることはできません。 たとえば「鈴木田 真一郎」さんとかいたらヒットします。 またLIKEでパフォーマンスが期待できるのは前方一致または後方一致の どちらかの場合のみです。 まぁ数万件レベルであれば%%のような構文でもそんなにスピードは 気にしなくても大丈夫でしょうけど、スピード重視なら全文検索でしょうね。 (2バイト文字の全文検索はMySQLのバージョンに依存します) 限られた用途だけでしたら#3さんのようなやり方で where name like CONCAT('%',replace('鈴木 一郎',' ',''),'%'); などとする手はあるでしょう きちんとやりたいなら、やはりSQLではなくプログラムレベルで 検索文字を分解して、SQLに渡してやる配慮が必要ではないでしょうか? 実際、キーワード渡しをするのであればそれなりのインタフェースが 必要でしょうし、インジェクション処理なども必要になるでしょうから 単純にはいきませんよ
その他の回答 (3)
- nora1962
- ベストアンサー率60% (431/717)
最初から全角スペースで区切られていると分かっているのなら。 where name like '%' || replace('鈴木 一郎',' ','') || '%'; で検索できると思いますが。
- yambejp
- ベストアンサー率51% (3827/7415)
>単語がスペースで区切られている場合、 具体的になにをしたいのかがわかりませんが そう言う場合は全文検索が効率的では?
- nora1962
- ベストアンサー率60% (431/717)
回答ではありません。 何度読んでも、どういうデータがあってそこからどんな結果を抽出しようと しているのかイメージがつかめません。もう少し、具体的にイメージできる ような補足がないと回答がつかない気がします。 #私もMysqlのストアドプロシージャは分からないので、補足されても、答え #る自信はありませんが。
補足
わかりにくくてすみません; たとえば、 id,name 1,鈴木一郎 2,山田二郎 3,佐藤三郎 4,田中四郎 というテーブル「member」があります。 現時点では、 検索フォームに「鈴木」と入れて検索できるまで作れたのですが、 「鈴木 一郎」のように、スペース区切りでの検索ができないのです。 $_GET['keyword']をcolnameに入れて、 WHERE name LIKE %colname% のようにしています。 この「鈴木 一郎」という入力値をスペースで分割して、 ANDでつないで、キーワードとして絞り込みたいのです。 つまりはyahooやgoogleのような検索ということでしょうか。 このようなものは全文検索で実現できるのでしょうか? ほんとうに説明が下手でもうしわけありませんが、 よろしくお願いします。