
単語がスペースで区切られている場合、
文字列を分割して配列に入れ
foreachなどでANDを足していく方法が主流(?)なようなのですが、
これをSQL文だけで実現することは可能でしょうか?
いろいろ調べたのですが、
SQL文にforなどの繰り返しがなさそうなのでむずかしいのかなと思っているのですが・・・
MATCHやAGAINSTを使って実現できますか?
あるいはストアドプロシジャなどでも構わないのですが・・
知識が乏しいので用語の使い方などもおかしなところがあるかと思いますが、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
もしかりに「鈴木 一郎」を分解して「%鈴木%」と「%一郎%」のANDを
とったとしても、「鈴木一郎」のみをヒットさせることはできません。
たとえば「鈴木田 真一郎」さんとかいたらヒットします。
またLIKEでパフォーマンスが期待できるのは前方一致または後方一致の
どちらかの場合のみです。
まぁ数万件レベルであれば%%のような構文でもそんなにスピードは
気にしなくても大丈夫でしょうけど、スピード重視なら全文検索でしょうね。
(2バイト文字の全文検索はMySQLのバージョンに依存します)
限られた用途だけでしたら#3さんのようなやり方で
where name like CONCAT('%',replace('鈴木 一郎',' ',''),'%');
などとする手はあるでしょう
きちんとやりたいなら、やはりSQLではなくプログラムレベルで
検索文字を分解して、SQLに渡してやる配慮が必要ではないでしょうか?
実際、キーワード渡しをするのであればそれなりのインタフェースが
必要でしょうし、インジェクション処理なども必要になるでしょうから
単純にはいきませんよ
No.3
- 回答日時:
最初から全角スペースで区切られていると分かっているのなら。
where name like '%' || replace('鈴木 一郎',' ','') || '%';
で検索できると思いますが。
No.2
- 回答日時:
>単語がスペースで区切られている場合、
具体的になにをしたいのかがわかりませんが
そう言う場合は全文検索が効率的では?
この回答への補足
わかりにくくてすみません;
たとえば、
id,name
1,鈴木一郎
2,山田二郎
3,佐藤三郎
4,田中四郎
というテーブル「member」があります。
現時点では、
検索フォームに「鈴木」と入れて検索できるまで作れたのですが、
「鈴木 一郎」のように、スペース区切りでの検索ができないのです。
$_GET['keyword']をcolnameに入れて、
WHERE name LIKE %colname%
のようにしています。
この「鈴木 一郎」という入力値をスペースで分割して、
ANDでつないで、キーワードとして絞り込みたいのです。
つまりはyahooやgoogleのような検索ということでしょうか。
このようなものは全文検索で実現できるのでしょうか?
ほんとうに説明が下手でもうしわけありませんが、
よろしくお願いします。
No.1
- 回答日時:
回答ではありません。
何度読んでも、どういうデータがあってそこからどんな結果を抽出しようと
しているのかイメージがつかめません。もう少し、具体的にイメージできる
ような補足がないと回答がつかない気がします。
#私もMysqlのストアドプロシージャは分からないので、補足されても、答え
#る自信はありませんが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数カラムに対するLIKE文の最適化
-
PL/SQLでの文字列比較
-
Access & ADOで「'」のLIKE検索
-
複数キーワードを複数カラムに...
-
End Ifに対応するIfブロックが...
-
他のシートの検索
-
INDIRECT関数の代替方法は?
-
UNIONする際、片方テーブルしか...
-
SELECT文で、指定カラム以外の...
-
AUTO_INCREMENTに0はダメ?
-
DBの定義のサイズを大きくし過...
-
テーブルの列数を調べたい
-
カラムとコラムの使い分け
-
SQLServerでNULLを挿入したいです
-
type date にnullをinsert
-
構造が異なる二つのテーブルをu...
-
BULK INSERT時のNull許容について
-
SQLでカラムを追加し、条件に合...
-
エクセルかワードで家系図を作...
-
SELECTの検索速度と、DB設計
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スペースによる絞り込み検索をS...
-
LIKEの右側にカラムを指定でき...
-
mysqlで50音順にorder byしたい。
-
whereで全てを検索する方法
-
複数カラムに対するLIKE文の最適化
-
アクセルでのクエリ
-
End Ifに対応するIfブロックが...
-
PL/SQLでの文字列比較
-
Android javaで検索プログラム...
-
SQL文に間違いがありますでしょ...
-
WHERE `年月日` = '晴' OR `年...
-
MySQL 配列もどきを条件式に
-
複数条件による検索
-
SQL文
-
SQLステータス:37000について
-
部分一致検索ができなくて困っ...
-
社名でデータ抽出できる検索シ...
-
複数のフィールドの検索
-
MySQLで複数フィールドから同一...
-
4つのセルの文字列が全て一致...
おすすめ情報