• ベストアンサー

select文、部分一致で複数のキーワードを使う

以下の環境で運用しています。 MySQL 5.0.45  PHP 5.1.6 完全一致でしたら、in ('キー1','キー2') でよいと思うのですが 部分一致で、キーワードを複数設定する方法が分かりません。 以下の文でいいかと思いましたが、`flg1` が0で無いものも表示します。 ※or の使い方が間違っているのだと思います select * from `meibo` where `flg1`= '0' `jyuusyo` like '%東京%' or `jyuusyo` like '%大阪%' よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 1:select * from `meibo` where `flg1`= '0' and `jyuusyo` like '%東京%' or `jyuusyo` like '%大阪%' (多分and入ってますよね?) 2:select * from meibo where flg1='0' and (jyuusyo like '%東京%' or jyuusyo like '%大阪%'); flg1が0でjyuusyoが東京か大阪を含むという条件の場合 かっこでorをくくってあげないと正しいデータの取得が出来ません。 andが優先されるため、flg='0'でjyuusyoに東京を含むまたはjyuusyoに大阪を含むものを取ってきています。 なのでjyuusyoに大阪を含めば取得してしまうことになります。 jyuusyoに東京または大阪かつflg1が0のデータを取得するをSQLにすると2のSQLになります。

kiyomidesuyo
質問者

お礼

こんにちは! ありがとうございました。 >2:select * from meibo where flg1='0' and (jyuusyo like '%東京%' or jyuusyo like '%大阪%'); >「かっこでorをくくって」  この様に使えばいいんですね。 おかげ様で期待通りの検索結果が出ました。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mysql 部分一致+ユニーク指定+最新 を表示

    mysql初心者です。 検索語句(search)で部分一致するものを、名前(name)と更新日(update)でユニーク指定し、修正日(time)が最新のものだけを表示させたいのですが、望む結果が得られません…。  SELECT * FROM db WHERE name LIKE \"%{$search}%\" GROUP BY name,update までは正しいと思うのですが、さらにtimeの最新を指定する方法を教えていただけませんか? よろしくお願いします。 いろいろ探して試行錯誤し、以下に行きついたのですが、部分一致がうまく機能しない時があります。(情報不足などあればご指摘ください。) SELECT * FROM db where (time) in (SELECT MAX(time) FROM db WHERE name LIKE \"%{$search}%\" GROUP BY name,update) (中略・件数を取得しページャーに使っています) SELECT * FROM db where (time) in (SELECT MAX(time) FROM db WHERE name LIKE \"%{$search}%\" GROUP BY name,update) ORDER BY time DESC LIMIT $start,10 (中略・whileとmysql_fetch_arrayで表示させています)

    • ベストアンサー
    • MySQL
  • キーワード \P が部分一致で検索できない。

    キーワード \P が部分一致で検索できない。 mysqlをutf8_unicode_ciで使っています。 検索キーワードに\Pと入力し、部分一致で検索すると、OMP,EEP等\Pと部分一致していない データも検索結果に表示されてこまっています。 \(バックスラッシュ)は特別な文字なので、\Pと入力しても、\(バックスラッシュ)は無視され、キーワード 「P」で検索されているようです。 今しようとしていることは、 検索キーワードを暗号化し、暗号化したキーワードで検索する処理です。 暗号化したキーワードはかなりの確立で\(バックスラッシュ)が含まれるので、 \(バックスラッシュ)を普通の文字列として検索したいです。 具体的には select * from testtbl where test like '%\\P%' このようなSQL分を実行した時、OMPやEEPが合致しないようにしたいのです。 よくわからなくなってきたので、アドバイス宜しくお願いします。

    • ベストアンサー
    • MySQL
  • 複数のSELECT文の結合について

    $sql = "(SELECT * FROM hospytal WHERE shochi LIKE \"%$keyword%\") UNION (SELECT * FROM hospytal order by kuchikomi desc);"; // 口コミ数の降順 このSQL文は間違っているでしょうか。 やりたいことは、hospytalテーブルのshochiカラムでキーワードを含むものを、 降順にソートしたいのですが。 どうすればちゃんと動作するのか、ご教授お願い致します。

    • ベストアンサー
    • MySQL
  • 部分一致検索ができなくて困っています。

    ※部分一致検索ができなくて困っています。 ※Apache2.0.52 + MySQL 5.0.51a + PHP5.2.8の環境です。 " sprintf "を使った、下記コードで部分一致検索をするには、どのようにしたらい いのか、どなたかご教授いただけないでしょうか。 -------------------------------------------------------------------------- $u_address = $_REQUEST['u_address'];// POSTで送られてきた値を受け取り変換。 検索fieldは、"u_address"です。 -------------------------------------------------------------------------- $query = sprintf("SELECT * FROM dive_free_tbl_ WHERE u_address = '%s' ORDER BY serial DESC", $u_address); ※上記のコードだと、"完全一致"にて検索となります。(部分一致の検索にしたい) 下記のコードに変更して、見たのですがエラーにでダメでした。(WHERE以下を抜粋) WHERE u_address = '%s' ORDER BY serial DESC", LIKE'%$u_address%'); WHERE u_address = '%s' ORDER BY serial DESC", LIKE'[%$u_address]%''); WHERE u_address = '%s' ORDER BY serial DESC", LIKE'{%$u_address}%''); WHERE u_address '%s' ORDER BY serial DESC", LIKE'%$u_address%'); WHERE u_address '%s' ORDER BY serial DESC", LIKE'[%$u_address]%''); WHERE u_address '%s' ORDER BY serial DESC", LIKE'{%$u_address}%''); " sprintf "を使わず、下記のコードでは問題なく部分一致検索ができます。 -------------------------------------------------------------------------- $sql = "SELECT * FROM dive_free_tbl_ WHERE u_address LIKE'%東%'"; -------------------------------------------------------------------------- 何方かご教授いただきたく、よろしくお願いします。 以上

    • ベストアンサー
    • MySQL
  • Select文のパフォーマンスについて

    Select文のパフォーマンスについて質問です。 (1)select * from table1 where col1='00001' and kbn in (1,2,3,4) (2)select * from table1 where col1='00001' and (kbn = 1 or kbn = 2 or kbn = 3 or kbn = 4) (1)と(2)ではどちらがパフォーマンスがよいのでしょうか? SQLServer2008

  • SELECT文でMySQLから取得したデータの使用

    PHP初心者なのでお手間を取らせてしまい申し訳ありませんがご教授お願いします。 select~ でMysqlより取得したデータをそのままMysqlで検索掛けたいので 下記のようにしてみたのですが機能しません "select * from address where addr_id like $row[addr]"; 多分色々と間違えてるのかも知れませんがよろしくお願いいたします。

  • select文の書き方で分からない所があります

    先人の書いたPHPを解析しています。 PostgresSQLとのやり取りをしている記述で、どうしても分からないところがあるので、教えてください。 select count(*) from yamato_order_info yo where yo.maker_system_id in (select mbs.maker_system_id from maker_base_info mbs where mbs.maker_name like '%$_GET[txtSearch]%'); fromでyoとmbsと書かれた部分があります。このデータベースには、そのようなテーブルが無いのですが、これは、Postgresの構文でしょうか? また、( の直前のinについてもなんとなくは理解できますが、ネットを調べても出てきません。 古い記述なので、最近のものには対応していないのかもしれません。 どなたかご教示願えませんか。 また、このような場合どのように調べれば良いでしょうか。

  • like検索の複数キーワードで、プレースホルダを利

    like検索の複数キーワードで、プレースホルダを利用するやり方が分からないので教えてください <やりたいこと> ・複数キーワード検索(東京 hoge) <現状、出来ていること> ・1単語キーワード検索(東京) <分からないこと> ・配列として処理すれば良いみたいなのですが、プレースホルダとの絡みでどうすればよいのか分かりません <環境> ・MySQL ・PDO <現状コード抜粋> public function search($keyword)  {  $sql = "   SELECT a.*     FROM hoge a      WHERE (honbun LIKE :keyword)      ";  $keyword ="%".$keyword."%";

    • ベストアンサー
    • PHP
  • Sybase のselect文の書き方について

    sybaseのselect文の書き方についてご教授お願いします。 以下のようなselect文を発行したのですが エラーになってしまいます。 Sybase では、この様なselectはできないのでしょうか? -------------------------------------------------------------- select q2.kind_id, q2.name, q1.id, q1.scription FROM (select * FROM tb_info WHERE tb_info.id = (select id from tb_info where u_id = 'XYZ')) q1 RIGHT JOIN ( SELECT * FROM tb_kind_info WHERE tb_kind_info.flg='1') q2 ON q1.kind_id = q2.kind_id -------------------------------------------------------------- -------------------------------------------------------------- 実行例 1> select q2.kind_id, q2.name, q1.id, q1.scription FROM (select * FROM tb_info WHERE tb_info.id = (select id from tb_info where u_id = 'XYZ')) q1 RIGHT JOIN ( SELECT * FROM tb_kind_info WHERE tb_kind_info.flg='1') q2 ON q1.kind_id = q2.kind_id 2> 3> 4> 5> 6> 7> 8> go Msg 156, Level 15, State 2: Server 'xxxxx', Line 3: キーワード select の近くに、構文エラーがあります。 Msg 102, Level 15, State 1: Server 'xxxxx', Line 3: ')' の近くに、構文エラーがあります。 Msg 102, Level 15, State 1: Server 'xxxxx', Line 5: 'q2' の近くに、構文エラーがあります。 -------------------------------------------------------------- MS Accsess上ではちゃんと取れることを確認できました。 どうぞよろしくお願いいたします。

  • select文について

    現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
このQ&Aのポイント
  • QL-800でメディアの検出サイズと設定したサイズが異なる問題について質問です。
  • Windows10を使用していて、USBケーブルで接続しています。
  • 関連するソフト・アプリやWi-Fiルーターの機種名について教えてください。
回答を見る