• 締切済み

文字の検索について

「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 '%テーブル%'

  • MySQL
  • 回答数3
  • ありがとう数2

みんなの回答

  • mickymac
  • ベストアンサー率37% (90/240)
回答No.3

手打ちでSQL文を発行するから面倒くさい、ということでしたら、 プログラムを作成した方が良いように思います。それであれば検 索語がいくら増えても勝手にSQL文を発行してくれますし。

furafurasan
質問者

お礼

mickymac様 ご回答いただき、ありがとうございました。 プログラムを組んでSQL文を発行するようにやってみました。 ありがとうございました。

  • taaaaaaa
  • ベストアンサー率38% (31/80)
回答No.2

SELECT * FROM `test` WHERE shouhin like '%PHP%' and shouhin like '%本%' and shouhin like '%楽しい%' でどうでしょうか? andでつなげれば出来ると思います。

furafurasan
質問者

お礼

taaaaaaa様 いつもご回答いただき、ありがとうございます。感謝いたします。 andで繋げていけばできるのですが、正規表現とか使ってもっと短く簡単にできないものかなと思い質問させていただきました。 最初の質問でうまく説明できず、申し訳ございません。 ご回答いただき、感謝しています。 ありがとうございました。

  • taaaaaaa
  • ベストアンサー率38% (31/80)
回答No.1

SELECT * FROM `test` WHERE shouhin REGEXP 'PHP'|'本'|'楽しい' では駄目なのでしょうか? 3つ、4つでも大丈夫だと思いますが。

furafurasan
質問者

補足

taaaaaaa様ご回答いただきありがとうございます。 REGEXP 'PHP'|'本'|'楽しい'だと、この3つのキーワードのうちどれか1つでも入っているとマッチすると思うのですが、この3つのキーワードが全部入ったレコードのみを抽出できる簡単な方法を探しています。 なにか良い方法があればご回答宜しくお願い致します。 ご回答いただき、ありがとうございました。

関連するQ&A

  • 2つフィールドを連結して検索するには

    MySQLの初心者です。よろしくお願いします。 1つのテーブルにある2つのフィールドのうち、どちらかにキーワードが入っている場合(両方に入っている場合も含む)を抽出したいのですが、検索するキーワードが1個の場合は、下記のようにすれば、うまく動くのですが、 ●1個のキーワードで検索する場合 (例として、2つのフィールドのうちどちらかに「山」のキーワードが入っている場合を抽出) select * from table WHERE (item_name LIKE "%山%" or outline LIKE "%山%" ) ●テーブルの内容(テーブル名:table) item_name | outline ==========+========= 山がある + 山と川 ----------+---------- 山がある + 川と森 ----------+--------- 山がある + 谷と林 --------------------- 質問したいことは、上記のテーブルから、item_nameとoutlineのフィールドのうち、2つのキーワード「山」と「川」が両方含まれるレコードを抽出したいです。上記のテーブルでいうと、抽出の結果、1行目と2行目が抽出したいのです。 ちなみに、下記のように記述したら、上記のテーブルで1行目だけ抽出されます。 select * from table WHERE (item_name LIKE "%山%" and item_name LIKE "%川%" or outline LIKE "%山%" and outline LIKE "%川%" ) 他にも、下記のように試してみたのですが、うまく抽出できませんでした。 SELECT * FROM table WHERE (concat(item_name,outline) LIKE '%山%' and concat(item_name,outline) LIKE '%川%') item_nameとoutlineのフィールドを結合して、結合した文字列で、「山」と「川」の両方が入っているレコードを抽出する方法はありますか? 2つのフィールドの文字列をあわせたなかから、「山」と「川」のキーワードが両方含まれるレコードを抽出したいのですが、何かよい方法はありますでしょうか。ご回答よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • AccessのクエリでvbLfのみ抽出するには

    Access2010のクエリー(SQL)で vbLfかvbCrLfが含まれているレコードを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*"; vbLfが含まれているレコードは抽出せず、 vbCrLfが含まれているレコードだけを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*"; でよいと思いますが、 vbCrLfが含まれているレコードは抽出せず、 vbLfが含まれているレコードだけを抽出するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。

  • PHPからのLIKE検索ができません。

    こんばんわ。お世話になります。 PHPからSQLを発行してLIKE検索をしようとしているのですがうまくいきません。(Xampp MySQL) $keyword = htmlspecialchars($_POST['keyword']); mysql_real_escape_string($keyword); $sql = "select * from master where name like '%{$keyword}%'"; テーブル内の name にマッチするはずの言葉があるのにマッチしません。 ちなみに echo $sql; とSQL文を表示させてPhpMyAdminでそれを実行すると、目的の検索結果が表示されます。 いろいろ検索してみたところ、LikeをLike Binary にする方法などがありましたが、どうにもうまくいきませんでした。文字コードはフォーム側、PHP・SQLともにUTF-8です。 '%{$keyword}%'あたりの書き方が悪いのでしょうか。 お手数おかけいたしますがアドバイスの程お願いいたします。

    • ベストアンサー
    • MySQL
  • PHP+MYSQLでワード検索

    PHP+MYSQLでワード検索を作りたいです。 検索は二つのテーブルの中のいくつかのフィールドに対して行います。 例えばキーで結ばれたテーブルA、Bがあったとして、 テーブルAのフィールド1、フィールド2、フィールド3、 テーブルBのフィールド3、フィールド4、フィールド5のいずれかに [佐藤]という文字列が含まれているデータを取り出す という事をしたいのです。 select * from テーブルA A, テーブルB B where A.フィールド1 = '%佐藤%' or A.フィールド1 like '%佐藤%' or A.フィールド2 like '%佐藤%' or ... という書き方だと、検索対象フィールドやレコードが多いと速度が遅くなりそうな気がします。 フルテキストインデックスを使用して検索を作成しようと思ったら、日本語は対応していないという事でした。 何か良い方法はありませんか? アドバイスをお願いします。 また、上のテーブルA、Bのレコードデータが貼り付けられたHTMLファイルがあります(1レコードで1ファイル)。 HTMLファイルを変数に読み込み、文字列が含まれているかをチェックする方法を思いついたのですが、これは重くなりますか? 検索対象レコードは現在150程度ですが、将来的には数千~数万になると予想されます。

    • ベストアンサー
    • PHP
  • MySQLで期間指定でキーワード検索するには?

    PHPでMySQLを利用し開発を行っています。 検索ボックスにキーワードを入力して検索をしたいのですが、期間を指定して検索できるようにする方法が分かりません。 さらに1ページに五件ずつ表示するようにしています。 下記はキーワード検索として動いているプログラムです。 例は2つのフィールドから検索しています。 SELECT * FROM テーブル名 WHERE フィールド名1 LIKE '%$search%' OR フィールド名2 LIKE '%$search%' LIMIT 0, 5; これに BETWEEN 期間1 AND 期間2  を追加して完成させようと思っているのですが、 どうも上手くいかないので、どのように書けばよいか教えて下さい。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQL WHERE句のLIKE検索

    初心者ですみません。 MySQL WHERE句のLIKE検索で、引っかかった文字列を 除いた項目を表示させるにはどうしたらいいでしょうか。 例えば、 SELECT * from [テーブル名] where [フィールド名] like '%あ%'; として、「あ」が入っているレコードを検索し、 該当しないレコードを表示させる。 どうか教えてください。よろしくお願いします。

  • MySQLで日本語検索

    MySQL初心者のものです。 今PHPとMySQLを利用して検索システムを作っています。 しかし日本語検索がどうしてもうまくいきません。 一応「教えてgoo」でも探してみたのですが、解決しませんでした。 MySQLで、 テーブル名 table フィールド名 field とすると、 select * from table where field like '%キーワード%'; のように検索してみたのですが、思うような結果が返ってきません。 ネットで検索すると「senna」をインストールと書かれていましたが、 そういったものをインストールしなければMySQLで日本語検索は出来ないものなのでしょうか? ちなみに MySQL5.0 PHP5.2.1 を利用しています。

  • アクセス2003で検索条件と検索キーワード検索

    アクセス2003で検索機能を作りたいです。 まずプルダウンで検索条件を選び、さらに検索キーワードを手入力し、その条件に見合ったものを抽出するという形。 検索条件とは、フィールド名。検索キーワードは、フィールドの中にある言葉。 質問 (1)マクロのフィルタの実行のwhere条件式において 〔フィールド名〕like~と入れているのですが、この頭のフィールド名をいじくれば良いのか? (2)ある識者に伺ったところ、次のVBA(イベントビルダ)を教わりましたが、オブジェクトに値を代入できませんと出てきました。 Me.filter=""&Me.![テキスト名1]&"like'"&"*"&Me![テキスト名2]&"*"&"'" Me.filterOn=True このテキスト名1をコンボに変更しました(非連結)。検索条件となるあるテーブルを値ソースとしています。何か自分が間違っていますか? できれば、クエリを使うことなく行きたい。 アクセスのつくりとしては、 基幹となるテーブルAとそれに1対多にあるテーブルBそしてテーブルBと1対1にあるテーブルCの3つをクエリを用いて1つのフォームに表しています。 その中のいくつかのフィールドを選択条件とし(プルダウンで選ぶ)、キーワード入力する。 小職、アクセスを始めたばかりです。どうかよろしくお願いいたします

  • MySQLで複数フィールドから同一語を検索するには・・・

    MySQLでフィールド数20程度のテーブルがあります。 全フィールドに対して、ある同一の語を検索するとき。 WHERE field1 LIKE "%検索語%" OR field2 LIKE "%検索語%" OR ... と書いています。 しかし、同一の検索語を何度も書くのはスマートではありません。 何か良い方法をご存知でしたら教えてください。

  • データベースのワイルドカードは%ではないの?

    アクセスのテーブルに あ い う があり、 SQL文で *********************************************** SELECT テーブル1.フィールド FROM テーブル1 WHERE (((テーブル1.フィールド) Like "%あ%")); *********************************************** としてもエラーにならないけど、「あ」が抽出されません。 *********************************************** SELECT テーブル1.フィールド FROM テーブル1 WHERE (((テーブル1.フィールド) Like "*あ*")); *********************************************** にすると、「あ」が抽出されます。 アクセスなどのデータベースのワイルドカードは%だと思っていたのですが違うのですか?