![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
単語がスペースで区切られている場合、
文字列を分割して配列に入れ
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PL/SQLでの文字列比較
-
スペースによる絞り込み検索をS...
-
MySQLのあいまい検索について
-
LIKEの右側にカラムを指定でき...
-
whereで全てを検索する方法
-
SELECT文で、指定カラム以外の...
-
一部のカラムでdistinctし全て...
-
DBの定義のサイズを大きくし過...
-
INDIRECT関数の代替方法は?
-
SQLServerでNULLを挿入したいです
-
GREATESTで NULLをスルーする方...
-
テーブルの列数を調べたい
-
UNIONする際、片方テーブルしか...
-
BULK INSERT時のNull許容について
-
【SQL】select に ワイルドカー...
-
MYSQLで全てのカラムから検索す...
-
【Transact-sql】 where条件、i...
-
mySQL プライマリーキーのカラ...
-
group byで最後のレコードを抽...
-
DB2のBLOB型カラムに格納された...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LIKEの右側にカラムを指定でき...
-
mysqlで50音順にorder byしたい。
-
複数カラムに対するLIKE文の最適化
-
LIKE演算子の%について教えて...
-
PL/SQLでの文字列比較
-
スペースによる絞り込み検索をS...
-
whereで全てを検索する方法
-
SELECT、特定カラムの文字列が...
-
複数キーワードを複数カラムに...
-
Access & ADOで「'」のLIKE検索
-
複数条件による検索
-
End Ifに対応するIfブロックが...
-
SQLステータス:37000について
-
MySQLのあいまい検索について
-
Accessで文字列の一部を抽出す...
-
SQLコマンド
-
SQLの範囲置換の文について
-
場合の数 中学入試 5枚のカード
-
DBの定義のサイズを大きくし過...
-
INDIRECT関数の代替方法は?
おすすめ情報