検索結果の抽出について!

このQ&Aのポイント
  • kとbカラムから検索されたキーワードに当てはまりかつ指定のカテゴリのデータを抽出する方法について教えてください。
  • カテゴリが「日記」の場合、指定のキーワード以外のデータも抽出されてしまう問題について困っています。
  • ANDやORの位置や構文の間違いが原因なのでしょうか。お手数ですが、アドバイスをお願いします。
回答を見る
  • ベストアンサー

検索結果の抽出。wehre句について!

おせわになりますっ! WHERE k like '%$serch%' or b like '%$serch%' AND cate='$cate' これなんですけどぉ・・・。 k と b カラムより 検索されたキーワード「$serch」に当てはまりかつカテゴリが「$cate」のものをを抽出すると言ったごく単純な事なんですけどぉ・・・。 $cate に悩まされておりますなのです。 $cate = 「日記」なのですけどこの状態の場合、日記ではない '%$serch%' に当てはまるものまで抽出されてしまうのです。 AND と or の位置によるものですか。 または句の間違いですか。  困ってます←

  • MySQL
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • mdp36
  • ベストアンサー率72% (26/36)
回答No.1

括弧を入れてください。 WHERE (k like '%$serch%' or b like '%$serch%') AND cate='$cate'

iinnffoo
質問者

補足

そこだったんですねっ!()照り 有り難う御座いましたv(*∩_∩*)v

関連するQ&A

  • 最も抽出結果が多い条件の取得

    下記のようなSQLがあるとき、最も検索結果が多くなる●(抽出条件)を 取得したいのですが、わかるかたいらっしゃいますか。 (●画面から入力される抽出条件。) select * from A where A.a1 like '●%' or A.b1 like '●%' 質問が簡易ですみませんが、よろしくお願いします。

  • データ内の「\」や「'」を抽出するには

    データ内に「\」や「'」が含まれているデータを抽出するには SELECT * FROM table WHERE column LIKE '%\%' SELECT * FROM table WHERE column LIKE '%'%' で良いのでしょうか?

    • ベストアンサー
    • MySQL
  • WHERE句の中でCASE句

    区分が1の時にステータス0,1,2のもの、区分が1以外の場合はステータス0,1のものを抽出、というSQLを書きたいのですが、 WHERE句の中に (CASE Kbn WHEN '1' THEN Status in('0','1','2') ELSE Status in('0','1') END) とするとエラーとなりました。 このような場合、WHERE句の中にCASE句で実現は不可能でしょうか? 一応以下のようにすれば期待通りの内容が抽出できるのですが、美しくないなあと。 ((Kbn = '1' AND Status in('0','1','2')) OR (Kbn != '1' AND Status in('0','1'))) 何か他にいい手がありますでしょうか。

  • WHERE句でOR ANDを使うと抽出が変

    SQLのwhere句について教えてください。Table_AとTable_Bはjoinされています。 下記の条件で、値を抽出したいです。型はintです。 Field1は必ずNULL Field2は値が1~14のどれか。それ以外にはマッチしない Field3は0か3のどちらかにマッチ。 Field4は2,3,4,8に以外にマッチ。 Field5は0,6のどちらかいにマッチ。 Field6はNULLを抽出 Field7はNULLを抽出 よって、下記のSQLを書きました。しかしながら、Field1~Field3まで抽出を かけた時に、1万件だったのが、Field1~Field5までを含めると、1万2000件に なってしまいます。なぜだかわかりません。何が間違っているかお教え 頂けないでしょうか?また正しいwhere句以下の条件はどのように正しく書けばいいのでしょうか? WHERE `TABLE_A`.`Field1` IS NULL AND `TABLE_B`.`Field2` = 1 or `TABLE_B`.`Field2` = 2 or `TABLE_B`.`Field2` = 3 or `TABLE_B`.`Field2` = 4 or `TABLE_B`.`Field2` = 5 or `TABLE_B`.`Field2` = 6 or `TABLE_B`.`Field2` = 7 or `TABLE_B`.`Field2` = 8 or `TABLE_B`.`Field2` = 9 or `TABLE_B`.`Field2` = 10 or `TABLE_B`.`Field2` = 11 or `TABLE_B`.`Field2` = 12 or `TABLE_B`.`Field2` = 13 or `TABLE_B`.`Field2` = 14 or `TABLE_B`.`Field3` = 0 or `TABLE_B`.`Field3` = 3 or `TABLE_B`.`Field4` <> 2 or `TABLE_B`.`Field4` <> 3 or `TABLE_B`.`Field4` <> 4 or `TABLE_B`.`Field4` <> 8 or `TABLE_B`.`Field5` = 0 or `TABLE_B`.`Field5` = 6 or `TABLE_B`.`Field6` is NULL or `TABLE_B`.`Field7` is NULL

  • adoのWHERE句 クエリだとフィルタされない

    エクセルvbaなのですが、 adoのWHERE句は、テーブルじゃないとダメなのでしょうか? と言うのも、 rs.Open "Q_カテゴリ WHERE 分類 like '%A%'" だと、エラーにならないのですが、抽出もされずに全レコードが対象になってしまいます。 しかし、 rs.Open "T_カテゴリ WHERE 分類 like '%A%'" にすれば、抽出された後のレコード数が取得されます。 エラーにならない事から、オブジェクトは存在してる事は確かなはずですが なぜかフィルタできません。 なぜでしょうか?

  • MYSQLで全てのカラムから検索する。

    tbというテーブルのbangというカラムに4が含まれていれば表示というのは select * from tb where (bang) like '%4%' ; という形になりますが、このtbテーブルにさらにname,tukiというカラムがあったとして カラムに関係なくレコードのどこかに4が入っていれば抽出するというSQL文が書きたいです。 select * from tb where bang like '%4%' or name like '%4%' or tuki like '%4%' ; と書くことで何とか今まではやってきたのですが、カラム数が増えてきてしまったので、ものすごく長いSQL文なってしまいました。 もう少しスマートにする方法はありませんか?

    • ベストアンサー
    • MySQL
  • 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
  • 複数カラムに対するLIKE文の最適化

    column1~column3のデータに文字検索をしたいのですが、 下記のような不恰好なSQLしか思いつきません、、。 select * from tb where   ( column1 like '%word1%' or column2 like '%word1%' or column3 like '%word1%' ) and ( column1 like '%word2%' or column2 like '%word2%' or column3 like '%word2%' ) and ( column1 like '%word3%' or column2 like '%word3%' or column3 like '%word3%' ) 試しに、 select * from tb where   ( ( column1 or column2 or column3) like '%word1%' ) and ( ( column1 or column2 or column3) like '%word2%' ) and ( ( column1 or column2 or column3) like '%word3%' ) と考えたのですが、これですと検索結果0件になってしまいます。 もっとスマートなSQL文がありましたら、ご教授頂きたいです。

    • ベストアンサー
    • MySQL
  • phpとmysqlで「あいまい検索」をしたいです。

    phpとmysqlで「あいまい検索」をしようと思い、下記サイトを参考にしましたが、 http://d.hatena.ne.jp/akihito_sado/20120602/p1 PDOを使ってlikeデータを抜き出したい場合、bindParamを使うらしいですが、 http://rasukaru55.sitemix.jp/or_kensaku.php 下記の場合どう書き直すべきでしょうか? 打ち方が悪いのか、うまく作動しません。 教えてください。 ※bindParamを使えばSQLインジェクション対策になっていると言う事でしょうか? <html> <head></head> <body> <?php //POST送信されたデータを$text1へ $text1 =@$_POST["text1"]; //SQL(テーブルから列を抽出する $sql ="SELECT 列名 FROM 表名 "; //キーワードが入力されているときはwhere以下を組み立てる if (strlen($text1)>0){ //受け取ったキーワードの全角スペースを半角スペースに変換する $text2 = str_replace(" ", " ", $text1); //キーワードを空白で分割する $array = explode(" ",$text2); //分割された個々のキーワードをSQLの条件where句に反映する $where = "WHERE "; for($i = 0; $i <count($array);$i++){ $where .= "(列名 LIKE '%$array[$i]%')"; if ($i <count($array) -1){ $where .= " AND "; } } //別カラムも同じ検索したい $where2 = " OR "; for($i = 0; $i <count($array);$i++){ $where2 .= "(2列名 LIKE '%$array[$i]%')"; if ($i <count($array) -1){ $where2 .= " AND "; } } } ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1"></td> <td><input type="submit" value="検索" name="sub1"></td> </tr> </table> </form> <?php //組み立てたSQL分を表示する echo "<p>組み立てたSQL分: ".$sql.@$where.@$where2; ?> </body> </html>

    • ベストアンサー
    • PHP
  • 複数のカテゴリを選択した上でLIKE検索

    こんにちは、SQL文の書き方について悩んでいます。 PHPとSQLITE3で複数キーワードの検索プログラムを作ろうとしています。 自分用の日記をSQLITE3のDBに記録しているもので、 main のカラムに本文を書いて、  kuwake で、hobby、work、other などカテゴリー分けをしています。 ※一つの記事にたいして、選択可能なkuwakeは一つだけです。 趣味(hobby) と 仕事(work) のカテゴリー の中で、 複数文字検索をしたいのですが、 以下のSQL文で動作しませんでした。  正しいSQL文の書き方をご教授ください。よろしくお願いします。 "SELECT 'hobby' and 'work' ''FROM '$table' WHERE 'main' LIKE '%キーワード1%' and main LIKE '%キーワード2%' ■テーブルの詳細↓ CREATE TABLE table (id INTEGER PRIMARY KEY, main TEXT, kuwake TEXT, date TEXT);

    • ベストアンサー
    • PHP