- 締切済み
文字の検索について
「test」というデータベースの「shouhin」というフィールドに、次のようなレコードがあった場合、「PHP」というキーワードと「本」というキーワードの両方にマッチしたレコードを抽出したいのですが、自分で試した方法は、下記の2つの方法なのですが、この方法では、マッチさせるキーワードが3個の場合4個の場合を考えると式が複雑になってしまいます。 今やりたいことは、たとえば、googleでの検索のように、「PHP 本」と入力したら、PHPと本の両方のキーワードを含んだレコードを抽出したいのです。「PHP 本 楽しい」なら、この3つのキーワードを含んだレコードといった感じに。 検索したいキーワードを変数(たとえば、$keyword='PHP 本')にいれておいて、これを簡単に実現するsqlの記述の仕方はありますか? ご回答よろしくお願い致します。 ●「test」というデータベースの「shouhin」というフィールドに対して検索 ID |shouhin --+---------- 1 | PHPが書かれた本 2 | この本はPHPが書かれています 3 | 楽しいPHPの本 4 | HTMLの本 --+--------------------------- ●試してみた方法2種類 SELECT * FROM `test` WHERE shouhin REGEXP '(アジアン.*テーブル)|(テーブル.*アジアン)' SELECT * FROM `test` WHERE shouhin LIKE '%アジアン%' and shouhin_name LIKE '%テーブル%'
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mickymac
- ベストアンサー率37% (90/240)
手打ちでSQL文を発行するから面倒くさい、ということでしたら、 プログラムを作成した方が良いように思います。それであれば検 索語がいくら増えても勝手にSQL文を発行してくれますし。
- taaaaaaa
- ベストアンサー率38% (31/80)
SELECT * FROM `test` WHERE shouhin like '%PHP%' and shouhin like '%本%' and shouhin like '%楽しい%' でどうでしょうか? andでつなげれば出来ると思います。
お礼
taaaaaaa様 いつもご回答いただき、ありがとうございます。感謝いたします。 andで繋げていけばできるのですが、正規表現とか使ってもっと短く簡単にできないものかなと思い質問させていただきました。 最初の質問でうまく説明できず、申し訳ございません。 ご回答いただき、感謝しています。 ありがとうございました。
- taaaaaaa
- ベストアンサー率38% (31/80)
SELECT * FROM `test` WHERE shouhin REGEXP 'PHP'|'本'|'楽しい' では駄目なのでしょうか? 3つ、4つでも大丈夫だと思いますが。
補足
taaaaaaa様ご回答いただきありがとうございます。 REGEXP 'PHP'|'本'|'楽しい'だと、この3つのキーワードのうちどれか1つでも入っているとマッチすると思うのですが、この3つのキーワードが全部入ったレコードのみを抽出できる簡単な方法を探しています。 なにか良い方法があればご回答宜しくお願い致します。 ご回答いただき、ありがとうございました。
お礼
mickymac様 ご回答いただき、ありがとうございました。 プログラムを組んでSQL文を発行するようにやってみました。 ありがとうございました。