アプリ版:「スタンプのみでお礼する」機能のリリースについて

単語がスペースで区切られている場合、
文字列を分割して配列に入れ
foreachなどでANDを足していく方法が主流(?)なようなのですが、
これをSQL文だけで実現することは可能でしょうか?
いろいろ調べたのですが、
SQL文にforなどの繰り返しがなさそうなのでむずかしいのかなと思っているのですが・・・
MATCHやAGAINSTを使って実現できますか?
あるいはストアドプロシジャなどでも構わないのですが・・

知識が乏しいので用語の使い方などもおかしなところがあるかと思いますが、よろしくお願いします。

A 回答 (4件)

もしかりに「鈴木 一郎」を分解して「%鈴木%」と「%一郎%」のANDを


とったとしても、「鈴木一郎」のみをヒットさせることはできません。
たとえば「鈴木田 真一郎」さんとかいたらヒットします。

またLIKEでパフォーマンスが期待できるのは前方一致または後方一致の
どちらかの場合のみです。
まぁ数万件レベルであれば%%のような構文でもそんなにスピードは
気にしなくても大丈夫でしょうけど、スピード重視なら全文検索でしょうね。
(2バイト文字の全文検索はMySQLのバージョンに依存します)

限られた用途だけでしたら#3さんのようなやり方で
where name like CONCAT('%',replace('鈴木 一郎',' ',''),'%');
などとする手はあるでしょう

きちんとやりたいなら、やはりSQLではなくプログラムレベルで
検索文字を分解して、SQLに渡してやる配慮が必要ではないでしょうか?
実際、キーワード渡しをするのであればそれなりのインタフェースが
必要でしょうし、インジェクション処理なども必要になるでしょうから
単純にはいきませんよ
    • good
    • 0

最初から全角スペースで区切られていると分かっているのなら。


where name like '%' || replace('鈴木 一郎',' ','') || '%';
で検索できると思いますが。
    • good
    • 1

>単語がスペースで区切られている場合、



具体的になにをしたいのかがわかりませんが
そう言う場合は全文検索が効率的では?

この回答への補足

わかりにくくてすみません;

たとえば、

id,name
1,鈴木一郎
2,山田二郎
3,佐藤三郎
4,田中四郎

というテーブル「member」があります。

現時点では、
検索フォームに「鈴木」と入れて検索できるまで作れたのですが、
「鈴木 一郎」のように、スペース区切りでの検索ができないのです。
$_GET['keyword']をcolnameに入れて、
WHERE name LIKE %colname%
のようにしています。
この「鈴木 一郎」という入力値をスペースで分割して、
ANDでつないで、キーワードとして絞り込みたいのです。
つまりはyahooやgoogleのような検索ということでしょうか。

このようなものは全文検索で実現できるのでしょうか?
ほんとうに説明が下手でもうしわけありませんが、
よろしくお願いします。

補足日時:2008/03/24 22:46
    • good
    • 0

回答ではありません。


何度読んでも、どういうデータがあってそこからどんな結果を抽出しようと
しているのかイメージがつかめません。もう少し、具体的にイメージできる
ような補足がないと回答がつかない気がします。

#私もMysqlのストアドプロシージャは分からないので、補足されても、答え
#る自信はありませんが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す