
単語がスペースで区切られている場合、
文字列を分割して配列に入れ
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で質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
- Visual Basic(VBA) 指定列最終行までのスペースを改行するVBAについて 2 2022/06/01 19:50
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- SQL Server 大学でSQLの授業があるのですが全くわかりません。 表ではなく文で説明されているのですが調べても理解 6 2022/07/20 02:26
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の条件での絞り込み検索の仕方
-
End Ifに対応するIfブロックが...
-
同一のカラム値をもつもの同士...
-
数百ページあるPDFをWebで公開...
-
日付を一括UPDATE
-
SQLの書き方
-
IDENTITYを設定
-
Mysql DATE型のDEFAULT値
-
Accessで複数(3以上)...
-
sqlite3でrowid以外にid必要で...
-
SQLで以下のような構文でコ...
-
SQLServer 複数列から同一語を検索
-
巨大テーブルからインデックス...
-
同テーブルで指定カラム値を相...
-
一部のカラムでdistinctし全て...
-
頭に0が付く文字
-
表の結合で左表のnullと右表のn...
-
条件付group byについて
-
group_concatを複数列に設定する
-
MySQL側で計算してもらってレコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LIKEの右側にカラムを指定でき...
-
mysqlで50音順にorder byしたい。
-
スペースによる絞り込み検索をS...
-
PL/SQLでの文字列比較
-
SQLステータス:37000について
-
複数カラムに対するLIKE文の最適化
-
whereで全てを検索する方法
-
Accessで文字列の一部を抽出す...
-
End Ifに対応するIfブロックが...
-
SELECT、特定カラムの文字列が...
-
ORDER BY CASEで異なる並替え...
-
複数キーワードを複数カラムに...
-
SQL 複数条件を設定
-
WHERE `年月日` = '晴' OR `年...
-
複数の条件での絞り込み検索の仕方
-
LIKE演算子の%について教えて...
-
LIKEは類似一致検索なのでしょ...
-
mysqlのlike binaryでの前方一致
-
SELECT文で、指定カラム以外の...
-
INDIRECT関数の代替方法は?
おすすめ情報