• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:条件のAND検索??)

条件のAND検索方法について

このQ&Aのポイント
  • 現在の検索システムに地域と予算の条件を追加したい場合、どのように変更すればよいでしょうか?試行錯誤していますが、具体的な方法がわかりません。
  • 現在の検索システムに新たな条件を追加する方法について教えてください。地域と予算を条件にしたAND検索を行いたいです。
  • 地域と予算の条件を追加したい場合、現在の検索システムのソースコードをどのように変更すればよいでしょうか?具体的な方法を教えてください。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4852/10266)
回答No.1

質問をいくつか見て、丸投げでなく努力されているのもわかるので、前回回答したりしてますが、 基本を学ばないで、困るたびに場当たり的に調べたり聞いたりしてという方法では、ちゃんとしたものが出来ないし、能力も向上しませんよ。 PHPやSQLのマニュアルを全部読めとは言いませんが、作ろうとしているもののレベルからすると、 「それぞれの入門書1冊は完璧にマスター & それぞれの中級の解説書を一部わからなくても良いので最後まで通読」が必要だと思います。 今回は、下記のようなSQL文を使うと良いでしょう。これがわからないと言うことは、SQLの入門書を読んでないと言うことですね。 "select name,jyusyo,kakaku,gazou,link from kensaku where jyusyo in (?,?,?) and ? <= kakaku and kakaku <= ? ;" ? の所には、値が入りますが、ライブラリのSQL呼び出しのプレイスホルダ機能を使うのが一般的でしょう。 プレイスホルダ機能を使わず、自分で文字列に値を埋め込むなら、そのままじゃなくてmysql_real_escape_string関数(mysqlの場合)を使ってから埋め込んでください。HTMLに値を埋め込むときに、htmlspecialchars関数を使うのと同じ。 in ( ) の部分は、値の個数がわからないので、implode(',', 配列値) を使ってカンマでつないでください。カンマを付加してあとで最後のカンマを1つとるなどと変なことをしてるのは、以前の質問でおしえてもらったはずのimplode関数の意味を理解していないと言うことですね。

noname#142312
質問者

補足

ありがとうございます。$kakaku=POST[kakaku]等はもちろん追加しますよね? はてなの部分に<?php htmlspecial~?>と入れたら良いですか?回答ありがとうございます!

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

関連するQ&A

  • 複数選択の方法が分からないのです。

    お世話になります。 現在<input type="checkbox" name="jyusyo" value="豊岡市">豊岡市<br> <input type="checkbox" name="jyusyo" value="養父市">養父市<br> <input type="checkbox" name="jyusyo" value="朝来市">朝来市<br> <input type="checkbox" name="jyusyo" value="神戸市">神戸市<br> <input type="checkbox" name="jyusyo" value="姫路市">姫路市<br> のようにしている為、最期にチェックしたワードでしか検索できません。 これらを複数選択に対応させる為 <input type="checkbox" name="jyusyo[]" value="豊岡市">豊岡市<br> <input type="checkbox" name="jyusyo[]" value="養父市">養父市<br> <input type="checkbox" name="jyusyo[]" value="朝来市">朝来市<br> <input type="checkbox" name="jyusyo[]" value="神戸市">神戸市<br> <input type="checkbox" name="jyusyo[]" value="姫路市">姫路市<br> としてみたものの、この先が分かりません。 受け取る側のphpは現在このような状態であります。 $jyusyo=$_POST["jyusyo"]; $jyusyonum=array("豊岡市","養父市","朝来市","神戸市","姫路市"); $query = "select name,jyusyo,kakaku,gazou,link from ocdda where"; if($jyusyo != "") { $query = $query . " jyusyo like '%$jyusyo%' "; } $result = mysql_query($query); $num_rows=mysql_num_rows($result); if($num_rows== 0){ $message="該当データ無し"; } else $message=$num_rows ."件あります"; echo $message; while($row = mysql_fetch_array($result)){ データベースのカラムもjyusyoになっていますが変えるべきですか? どうか改変ポイント等の御教授お願い申し上げます。

    • ベストアンサー
    • PHP
  • 完全一致ではなく”含む”

    if($jyusyo != "") { foreach ($jyusyo as $value) { $like .= "'" . $value . "',"; } //最後の , を削除 $like = substr($like, 0, -1); $query = $query . " jyusyo in ($like) "; } 現在教えていただいたコードを使用しています。このコードだと”豊岡市”に完全一致した情報しかDBから取り出されません。これを”豊岡市中央町”等の豊岡市を含むものも検索結果に反映させるにはどうしたらよいですか??

    • ベストアンサー
    • PHP
  • データを昇順に並べるには

    $query = "select id,name,jyusyo,kakaku,gazou,link from kensaku where"; と書いてDBから正常にデータが取得できています。これを (1)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku order by kakaku"; (2)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku order by kakaku asc"; (3)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku [where where_definition] order by kakaku";(このやり方はPHPプロというサイトで教えてもらいました) これら三つどれを書いてもエラーになります。どうしたら良いでしょうか??

    • ベストアンサー
    • PHP
  • Warning: mysql_num_rows()

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in と、phpでエラーが出ます。調べた結果クエリに問題があるということです。 クエリは $query = "select name,jyusyo,kakaku,gazou,link from kensaku order by kakaku asc"; です。なにがおかしいのでしょうか??カカクカラムを昇順に呼び出したいのですが。。。

    • ベストアンサー
    • MySQL
  • 配列の受け取り方について

    value="<?php echo addslashes(implode((array) $_POST['jyusyo'],",")); ?>"> タイトルのように受け取ったら "豊岡市,養父市" のようになってしまいます。 "豊岡市","養父市" のようにしたいんですが、どう変更したら良いですか??

    • ベストアンサー
    • PHP
  • 検索結果の画像が表示されない

    <?php $con=mysql_connect(""); if(!$con){ echo ("MYSQLに接続失敗"); exit(); } else { echo ("#1=$con"); } mysql_query("SET NAMES eucjpms") or die("can not SET NAMES eucjpms"); $db=mysql_select_db(""); if(!$db) { echo ("DB選択失敗"); } else{ echo("DB選択OK!"); } $jyusyo=$_POST["jyusyo"]; $jyusyonum=array("豊岡市","養父市","朝来市","神戸市","姫路市"); $query = "select name,jyusyo,kakaku,gazou from ocdda where"; if($jyusyo != "") { $query = $query . " jyusyo like '%$jyusyo%' "; } $result = mysql_query($query); $num_rows=mysql_num_rows($result); if($num_rows== 0){ $message="該当データ無し"; } else $message=$num_rows ."件あります"; echo $message; while($row = mysql_fetch_array($result)){ // Loop through the array of score data, formatting it as HTML echo '<table>'; $i = 0; { // Display the score data echo '<tr><td class="scoreinfo">'; echo '<span class="kakaku">' . $row['kakaku'] . '</span><br />'; echo '<strong>会社名:</strong> ' . $row['name'] . '<br />'; echo '<strong>住所:</strong> ' . $row['jyusyo'] . '</td>'; if (is_file(GW_UPLOADPATH . $row['gazou']) && filesize(GW_UPLOADPATH . $row['gazou']) > 0) { echo '<td><img src="' . GW_UPLOADPATH . $row['gazou'] . '" alt="images" /></td></tr>'; } else { echo '<td><img src="' . GW_UPLOADPATH . 'ie.jpg' . '" alt="images" /></td></tr>'; } $i++; } echo '</table>'; mysqli_close($dbc); ?> <?php } ?> こちらでは表示されないのですが、 <?php require_once('appvars.php'); require_once('connectvars.php'); // Connect to the database $dbc = mysqli_connect(""); // Retrieve the score data from MySQL $query = "SELECT * FROM "; $data = mysqli_query($dbc, $query); // Loop through the array of score data, formatting it as HTML echo '<table>'; $i = 0; while ($row = mysqli_fetch_array($data)) { // Display the score data echo '<tr><td class="scoreinfo">'; echo '<span class="kakaku">' . $row['kakaku'] . '</span><br />'; echo '<strong>会社名:</strong> ' . $row['name'] . '<br />'; echo '<strong>住所:</strong> ' . $row['jyusyo'] . '</td>'; if (is_file(GW_UPLOADPATH . $row['gazou']) && filesize(GW_UPLOADPATH . $row['gazou']) > 0) { echo '<td><img src="' . GW_UPLOADPATH . $row['gazou'] . '" alt="image" /></td></tr>'; } else { echo '<td><img src="' . GW_UPLOADPATH . 'unverified.gif' . '" alt="Unverified kakaku" /></td></tr>'; } $i++; } echo '</table>'; mysqli_close($dbc); ?> こちらでは画像が表示されます。同じ階層でほぼ同じソースなのに何故前者のコードは画像が表示されないのでしょうか?

    • 締切済み
    • PHP
  • 検索しても何故か空白ページに

    $usersearch =$_POST['usersearch']; $query = "select * from kensaku2 where syou like '%{usersearch}%}'"; $result = mysql_query($query); while($row = mysql_fetch_array($result)){ echo $row['byou']; echo $row['syou']; } usersearchの値を受け取り、syouカラムに該当するデータがあれば表示するというソースのつもりですが、カラムに該当するワードをテキストボックスに入れても何故かsyou,byouのデータが表示されません。hiddenで受け取った所、valueにきちんとワードは入ってました。

    • ベストアンサー
    • PHP
  • スクレイピングに関して

    現在はローワークのデータをスクレイプするシステム作ってますが 例えば豊岡市で検索しても、八王子市で検索しても全て同じアドレスに https://www.hellowork.go.jp/servicef/130020.do に飛んでしまう為、スクレイピングが不可能な状態です。しかし、ハローワークをスクレイプしたサイトは多数ありますし、出来るのだと思うのですが、どうやったらできるんでしょうか?? 恐らくHTTPリクエストで同じ値を飛ばし、受ければ取得できると思いますが <input type="text" name="chiku1" value="豊岡市" /> $post = $_POST['chiku1']; これでもできません。どうしたらいいでしょうか。

    • ベストアンサー
    • PHP
  • 紐付いている3つのテーブルに対しての検索条件の指定がうまくいきません・・。

    紐付いている3つのテーブルに対しての検索条件の指定がうまく書けません。 3つのテーブルが紐付いています。 ・main_tableのIDと、note_id_tableのID ・note_id_tableのnote_IDと、note_value_tableのnote_ID main_table ID, name ----------- 1, aaa 2, bbb 3, ccc 4, ddd 5, eee note_id_table ID, note_ID ----------- 1, 1 1, 2 1, 3 1, 4 3, 5 3, 6 4, 7 4, 8 4, 9 5, 10 note_value_table note_ID, note_value ----------- 1, AAAA1 2, BBBB1 3, CCCC1 4, DDDD1 5, AAAA3 6, EEEE3 7, FFFF4 8, GGGG4 9, HHHH4 10, IIII5 検索の対象にしたいのは、note_valueです。 今まで、「note_valueに検索文字列が含まれている」main_tableのレコードを取得していました。 SELECT main_table.* FROM main_table LEFT JOIN note_id_table ON main_table.id = note_id_table.id LEFT JOIN note_value_table ON note_id_table.note_ID = note_value_table.note_ID WHERE note_value_table.note_value LIKE '%AAA%' 上記クエリだと、note_valueにAAAを含んでいるnote_ID:1,5を持つ、 main_tableのID:1,3のレコード、2件が返ってきます。 これを、検索文字列のNOT検索とAND検索に対応させたいのです。 NOT検索について、 WHERE NOT(note_value_table LIKE '%AAA%') としてみたのですが、main_tableのID:1,3,4,5のレコードが返ってきました。 期待した動作は、main_tableのID:2,4,5でした。 まず、note_value_tableにデータを持っていないmain_table.id:2はNULLのようで、 この条件では無視されてしまうようです。 また、main_table.id:1,3が返ってきてしまうのは、 main_table.id:1に紐付いているnote_IDの内、2,3,4と main_table.id:3に紐付いているnote_IDの内、6に条件が引っかかってしまうようなのです。 AND検索ですが、上記クエリの条件を WHERE note_value_table LIKE '%AAA%' AND note_value_table LIKE '%BBB%' としたところ、0件となってしまいました。 期待した動作は、note_valueにAAAとBBBを含んでいるnote_ID:1を持つ、 main_tableのID:1のレコード、この1件が返ってくることでした。 どうもこの条件だと、一つのnote_valueにAAAとBBBが含まれていないとHITしないようです。 結局JOINしているので、note_valueの数だけ同じmain_tableが前にくっついてるイメージなんですよね。 main_tableのレコード末端に、紐付いているnote_valueのフィールドを横に繋げるか、 紐付いているnote_valueの文字列を連結したものを一つのフィールドとして解釈するようなことができれば 実現できるのかなぁと思いました。 試行錯誤の末に、パフォーマンスが非常に悪いんですが、下記クエリで機能的には実現できたのですが、 これでは使えないので何かいいアイディアなどあればご教授お願いしたいです。 サブクエリを使いたくないというのがあります。 --AAAの検索 JOINする時に検索してしまうようにしてみました。 また、そのためには、note_id_tableからnote_IDを取得できていないとだめなので、 サブクエリ化してみました。 SELECT main_table.* FROM main_table LEFT JOIN note_value_table ON note_value_table.note_ID IN (SELECT note_ID FROM note_id_table WHERE main_table.id = note_id_table.id) AND note_value_table LIKE '%AAA%' WHERE note_value_table.note_value IS NOT NULL --AAAのNOT検索 WHERE条件を逆にするだけにしました。 --AAAとBBBの検索 検索条件1つに対して、JOINを増やしていくようにしました。 JOINが増えるのもそうですが、サブクエリも倍になってしまい、 検索条件を増やせば増やすほどパフォーマンスが落ちてしまいます。。 SELECT main_table.* FROM main_table LEFT JOIN note_value_table AS note_value_table1 ON note_value_table1.note_ID IN (SELECT note_ID FROM note_id_table WHERE main_table.id = note_id_table.id) AND note_value_table1 LIKE '%AAA%' LEFT JOIN note_value_table AS note_value_table2 ON note_value_table2.note_ID IN (SELECT note_ID FROM note_id_table WHERE main_table.id = note_id_table.id) AND note_value_table2 LIKE '%AAA%' WHERE note_value_table1.note_value IS NOT NULL AND note_value_table2.note_value IS NOT NULL

    • ベストアンサー
    • MySQL
  • AND検索がきちんとできません

    PHP、MYSQLの勉強を始めたばかりの者です。 AND検索をしたいのですが…… きちんと検索できません。 データの中身 データタイトル|キーワード A|テスト B|サンプル 以下のようにすると、「テ」「ス」でAのデータは出てくるのですが、 「テ」「サ」で検索すると、 一つもでてこないはずなのに、Bのデータが出てきます。 「サ」「テ」ですとAのデータがでてきてしまいます。 何故でしょうか。 自分なりに考えてはみたのですが、お手上げ状態です。 何卒、宜しくお願いします。 <form method="GET" action="sample.php"> <input type="text" name="q" size="20"> <input type="submit" value="search"> </form> <?php require_once 'dbmanager.php'; $pdo = getDb(); // クエリ設定 if (isset($_GET['q'])) { $q = htmlspecialchars($_GET['q']); //クエリを入力 $q = str_replace(" ", " ", trim($q)); $words = explode(" ",$q); } // 解析 $tmp = []; $wd = []; $i = 0; foreach($words as $word) { if(!empty($word)) { $tmp[] = " keyword LIKE :word".$i." "; $wd[] = '%'.$word.'%'; $i++; } } // SQL if(count($tmp) > 0){ $sql = "SELECT * FROM ttables WHERE (".implode("AND",$tmp).") ORDER BY id DESC"; $search_sql = $pdo->prepare($sql); foreach($wd as $key => $word){ $search_sql->bindParam(':word'.$key, $word); } $search_sql->execute(); // while while($row = $search_sql->fetch(PDO::FETCH_ASSOC)) { print"<li>{$row['keyword']}{$row['title']}</li>"; } }

    • ベストアンサー
    • PHP