PHP+MySQLでスペースによる絞込み検索をかける方法

このQ&Aのポイント
  • PHPとMySQLを使用して、スペースによる絞込み検索を行う方法について教えてください。
  • 検索フォームにスペースで絞込み検索を実装する方法について調べていますが、問題が発生しています。
  • 検索する人によってスペースで区切る回数が分からない場合に、スペースの回数に応じて絞込みを行う方法を教えてください。
回答を見る
  • ベストアンサー

PHP+MySQLでスペースによる絞込み検索をかける方法

宜しくお願いします。 PHPとMySQLで検索フォームを作っているのですが、OKWebやGoogleの様に、入力フォームにスペースで絞込み検索が出来る様にしたいと思っています。 実際に作ってみると、大変な問題に気付きました。 PHPからMySQLにSELECT文で絞込み検索かける時には、 mysql_query(select * from DB名 where COLUMN名 = '検索内容' and COLUMN名 = '検索内容'); といった形にしなければならないと思いますが、検索する人によってスペースで区切る回数は分からないので、実際に区切られた回数だけANDを自動的に作らなければ絞込みが出来ない事に気付きました。 しかし、PHPの関数だけで入力されているスペースの回数を割り出し、その数だけクエリの中に『and COLUMN名 = '検索内容'』を自動生成する方法なんて、あるのでしょうか?世の中の検索サイトを見ると、至極当たり前の様に出来ているので、何かやり方があるのだろうとは思いますが、皆目検討がつきません。どなたか教えて頂けると助かります。 何卒、宜しくお願い致します。

  • nikuq
  • お礼率75% (477/631)
  • PHP
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • BENGAL
  • ベストアンサー率73% (22/30)
回答No.2

あまり、ずばりな回答を言うのは好きじゃないのですが(^^; 入力されたものが「A B C D」であれば以下の様になると思います。 $arrData = array( 'A','B','C','D' ); for ( $i=0; $i<count($arrData); $i++ ){ if ( $i != 0 ) { $where .= " AND "; } //最初以外は「AND」を付ける。 $where .= "COLUMN名 = '".$arrData[$i]."'"; } ------------------------------------------------ とりあえず、上記の方法が発想できるようになれば、 スマートな方法として、これがオススメです。 $arrData = array( 'A','B','C','D' ); $where = implode ( ' AND ' $arrData ); //配列を指定された文字で連結 参考になれば幸いです。

nikuq
質問者

お礼

ありがとうございます! まさにズバリ!のご回答です! そうか!文字列の結合を使えばいいのか!!ってすごく納得できました(^○^) for文やwhile文っていうと、縦の足し算のイメージが強くて、文字列の結合みたいな横への足し算っていう考え方が思いつきませんでした(-_-;) ほんとうに助かりました!ありがとうございますm(__)m

その他の回答 (1)

  • BENGAL
  • ベストアンサー率73% (22/30)
回答No.1

ポイントだけ、書きますね。 空白で区切られたテキストを分割する方法として、『split』という関数があります。 結果は配列ですので、『count』を使えば数は割り出せます。 その数分、WHERE句を書いてあげるようにすれば問題ないと思います。 これだけで、ご希望に添えるかと思いますが、数を数えなくても、 『foreach』を使えば、あるだけループしますので、もっと便利ではないでしょうか。 基本ですが、foreachを使用する場合は、配列であるかどうかのチェックは行ってくださいね。 参考になれば幸いです。

nikuq
質問者

補足

早速のご回答ありがとうございます。 すみません。配列数を抽出する方法は分かるのですが、その数の分だけwhere句を自動で生成する方法がわからないのです。こちらのヒントを頂けると非常にありがたいのですが・・・

関連するQ&A

  • PHPの変数を使ったMYSQL条件検索について

    PHP初心者です。どなたか詳しい方ご教示下さい。かれこれ半日調べてもわかりません。 フォームに入力したキーワードを使って条件検索を行い、MYSQLに登録した必要なレコードを取り出す作業を行いたいのですが「Unknown column 'henkan' in 'where clause'」と出て表示されません。 カラムの方がINT型なら表示されるのですが、TXT型なら上記エラーが出ます。 色々調べたらインジェクション対策(?)で「'」と「”」の入れ方が悪く、「`」を変数の前後に入れれば良いかと思い試してみましたが「Parse error: syntax error, unexpected~」と出てエラーが出ます。 他にも色々「'」「"」の位置を変更して見ましたがエラーが出ます。どなたか詳しい方、お教え下さい。 よろしくお願い致します。 ・PHPプログラム <?php mysql_connect('localhost','root','') or die(mysql_error()); mysql_select_db('mydb'); mysql_query('SET NAMES UTF8'); $recordSet = mysql_query('SELECT * FROM manyu where syurui ='.$_POST['free']); $data = mysql_fetch_assoc($recordSet) or die(mysql_error()); echo $data['keyword']; ?> ・テーブルとカラム id syurui keyword ___ _________ __________ 6 henkan 変換 →「変換」と出てくる予定でした。

  • PHP・MySQL・javascriptを用いたセレクトボックスによる絞込み検索

    はじめまして!現在PHPを勉強し始めた初心者なのですが、PHP・MySQL・javascriptを用いて、検索機能を実現させたいと思い思考錯誤しているのですが、やりたいことができず、困っております。 やりたいことというのは、MySQLに商品テーブルが存在し、材質やサイズなどのフィールドをいくつか設けているのですが、セレクトボックスを5つ配置し、それぞれのセレクトボックスを選んでいくと他のセレクトボックスが連動して絞り込まれていき、5つ全て選んだ時に1つの商品がヒットするというものを作りたいのです。 一つ目のセレクトボックスからポストされた値を次のセレクトボックスのクエリのwhere句の条件として絞り込んで二つ目を表示させることはできたのですが、三つ目以降どうしていいかわかりません>< 初心者なので、詳しく解説して頂ければ幸いです。 どうか宜しくお願いいたします。 現在製作中のソースですは下記をご参照下さい。 <?php //MySQLクラスファイルの取り込み require_once("mysql.php"); //MySQLクラスファイルの取り込み $mysql = new MySQL; //ポストされた値を変数に格納 $category = $_POST["category"]; $syo_code = $_POST["syo_code"]; ?> <html> <head> <body> <form action="jon2.php" method="post"> <!--jon2.phpは現在のページの名前です--> <select name="category" onChange="this.form.submit()"> <option value="">-------------</option> <? $query = "select * from category"; $result = $mysql->query($query); while ($rows = $mysql->fetch($result)) { ?> <option value="<?=$rows["category_id"]?>"><?=$rows["category"]?></option> <? }//while終わり ?> </select><br /> <select name="syo_code"> <option value="">-------------</option> <? $query = "select syo_code from syohin where category_id=$category"; $result = $mysql->query($query); while ($rows = $mysql->fetch($result)) { ?> <option value="<?=$rows["syo_code"]?>"><?=$rows["syo_code"]?></option> <? }//while終わり ?> </select> </body> </head> </html>

    • 締切済み
    • PHP
  • Mysql 絞り込み検索

    絞り込み検索を実装したいのですがうまくいきません。 ご教授していただければ幸いです。 データは次のとおりです。 テーブル名 「zyoho」 カラム  cityid :tenki_id :kansou 1:1:あつい 2:2:乾燥してる 1:2:乾燥してる 3:3:寒い 以上をセレクトボックスにて絞り込み 「kansou」のデータをだしたいのいです。 一つ目のセレクトボックス ・東京 :cityid 1 ・大阪:cityid 2 ・熊本:cityid 3 二つ目のセレクトボックス ・晴れ:tenki_id1 ・雨:tenki_id2 ・雪:tenki_id3 ・何も選択しなかったらすべて表示。 ・例えば東京だけ選ぶと あつい 乾燥してるの二つのデータ結果。 ・天気だけを選ぶと出てくるいくつかのデータ結果。 ・県、天気を選ぶと絞り込まれたデータ結果。 このように絞り込みたいのですがご教授いただければ幸いです。 お願いいたします。

    • ベストアンサー
    • MySQL
  • 検索ワードを(1)クリアされないようにしたい、(2) スペース区切りしたい

    ◆ 環境: PHP 5.0.3 MySQL 4.0.14b(Win)(←古いこと承知) IIS 5.1 ◆ 背景 質問 No.1212008にも書きましたが、PHP+MySQLで簡単な検索システムを 作っている初心者です。 ・001.htm に設置したこの検索フォームからPOSTすると ・002.php に渡され、これがHTMLを組み立てて検索結果を表示します。 ・002.php には、001.htmと同じ検索フォームを設置してあります。 ・検索フォームは name="1" ~ "4" までのテキストフィールドと検索ボタンで、  次のようなSQL文でWHERE文を構成しています。 $sql = "select * from t_url where (fullpass like '%$title1%')"; if (strlen($title2) > 0) { $sql .= " and (fullpass like '%$title2%')"; } if (strlen($title3) > 0) { $sql .= " and (fullpass like '%$title3%')"; } if (strlen($title4) > 0) { $sql .= " and (fullpass like '%$title4%')"; } ◆ 質問は2点です。 (1) 001.htmから検索し、002.php結果がリストアップされると、 002.phpにある検索フォームに入力したキーワードはが当然クリアされています。 また、002.php から再検索しても、同じくクリアされてしまいます。 いずれの場合にも、テキストフィールドに入力した内容を残す(引き継ぐ)ことは 可能でしょうか?PHPとかJavascriptとかで実現方法はあるのかもしれませんが ちょっと見当がつきません。 (2)今は1フォーム・1キーワード×4テキストフィールドなので4ワードまでは AND条件で絞り込みできますが、 Web検索ライクに、検索フォームのテキストは1つ、全角&半角スペースで区切った キーワードがAND条件でつながるようにするのも敷居高いでしょうか。 アドホックな感じがするので、何とかできたらと思うのですが。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • フォーム上での絞り込みについて

    フォーム上での絞り込みについて 皆様、こんにちは。アクセス初心者です。 以前質問させていただいたのですが、やはり一人で解決できない為、再度皆さんの力をお借りしたいと思います。 フォーム上での絞り込みを設定したいのですが、絞り込みのテキストボックスに データを入力してもQueryのデータが反映されません。 Queryにはフォームのテキストボックスへ入力したデータが反映していますが、Queryのデータがフォームへ反映しません。たまに反映されたかと思うと何かの拍子に又反映されなくなります。 (1)クエリに[forms]![フォーム名]![絞り込みのテキストボックス名]と入力 (2)フォームのレコードソースへ上記のクエリ名、かつ絞り込みのテキストの更新後処理 DoCmd.Requery と記載しています。 大変初歩的な質問で恐れ入りますが、どなたかご教示いただけませんでしょうか? 何卒、よろしくお願いいたします。

  • php+mysqlで検索フォームの作成について

    ごく最近PHPとmysqlを勉強しだした初心者です。 PHPでDBの検索フォームを作ろうとしているのですが、どうしてもわからないので質問させていただきました。 検索フォームに電話番号を入れると、該当する人の情報を表示させるようにしたいと思ってます。 私の持っている本では、SQLの検索を行うにはSELECT句を使い   SELECT フィールド名 FROM テーブル名 WHERE 条件文; という風にあって、条件文がid=1とかの定数で指定したものしかありません。 検索フォームに入力された数値($_POSTの値)を条件文にいれて、検索フォームで入力された電話番号を検索するようにできますか? もしできないなら、どのような形で作ればよいでしょうか? 贅沢ですが、できれば簡単に解説もしていただけると非常に助かります。 ご教授の程、何卒よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • フォーム上での絞り込みについて

    フォーム上での絞り込みについて 皆様、こんにちは。アクセス初心者です。 フォーム上での絞り込みを設定したいのですが、絞り込みのテキストボックスに データを入力してもQueryのデータが反映されません。 (1)クエリに[forms]![フォーム名]![絞り込みのテキストボックス名]と入力 (2)フォームのレコードソースへ上記のクエリ名、かつ絞り込みのテキストの更新後処理 DoCmd.Requery と記載しています。 この設定で他に何が足りないのかわからずここ何日か前に進めません。 大変初歩的な質問で恐れ入りますが、どなたかご教示いただけませんでしょうか? 何卒、よろしくお願いいたします。

  • PHP&MYSQLでの検索システムについて

    PHP&MYSQLでチェックボックスを使用した絞込み検索システムを制作しようと思っています。 検索機能の内容は □居酒屋□レストラン□美容室 のチェックボックスに複数また、いずれかにチェックをして該当されたお店の写真(一枚)と説明文を1ページ20店舗ずつ表示したい思っています。 現在、MYSQLにデータベース、テーブルをつくりそれをチェックボックス用のHTMLとデータ取得用のPHPでMYSQLに接続、データを読み出すことはまでは出来たのですがチェックボックスで絞込みが出来ない状態で作業がとまっています。どなたかにご教授お願いしたいと思い質問させていただきました。よろしくお願い致します。 また、画像はどこに格納しておくのが良い方法なのでしょうか? ソースは select.html <body> <form name="form" action="search.php" method="post"> <input name="key[1]" value="居酒屋" type="checkbox" />居酒屋<br> <input name="key[2]" value="レストラン" type="checkbox" />レストラン<br> <input name="key[3]" value="美容室" type="checkbox" />美容室<br> <p><input value="検索開始" type="submit" /></p> </form> </body> search.php <?php $link = mysql_connect('localhost', 'root', 'pass'); if (!$link) { die('接続失敗です。'.mysql_error()); } $db_selected = mysql_select_db('mysqltest', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } if($debug) print_r($HTTP_POST_VARS); //クエリ生成 $query = "SELECT id,name,state FROM personal_info "; mysql_set_charset('utf8'); //検索条件生成 //名前 if(!empty($name)) { $value = addslashes($value); $where = "value = '$value' && "; } if(!empty($where)) { $where = substr($where, 0, -4); $where = "WHERE " . $where; } $query .= $where; if($debug) { print "<BR><BR>"; print $query; } $result = mysql_query($query); $num_rows = mysql_num_rows($result); if($num_rows == 0) $message = "該当するデータはありませんでした"; else $message = $num_rows . "件ヒットしました"; ?> 検索結果<br> <?=$message?> <table border=0> <? while($row = mysql_fetch_assoc($result)): ?> <tr><td><?=$row[name]?></td></tr> <? endwhile; ?> </table> <a href="select.html">再検索</a> 環境 XAMPP 1.3.0.1 PHP 5.2.9.9 MYSQL 5.1 また、この検索システムに関する書籍やサイトがありましたら教えて頂けたらうれしいです。

  • phpでmysqlを検索、計算

    PHPでmysql内のデータを、条件で絞込み、 一致するものの平均と個数を画面で表示したいのですが、 エラーが表示され、検索結果を表示することができません 現在書いているコードは以下になります ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <html> <head> <title>検索結果</title> </head> <body> <?php ~~省略~~ $Name = $_POST['namae']; $Day = $_POST['hiduke']; $conn = mysql_connect($url,$user,$pass); $sdb = mysql_select_db($db,$conn); $sql1 = select avg(score) from seiseki where name = "$Name" and day like "$Day*"; $sql2 = select count(score) from seiseki where name = "$Name" and day like "$Day*"; $sql3 = select count(score) from seiseki where name = "$Name" and day like "$Day*" and score = 1; $res1 = mysql_query($sql1); $res2 = mysql_query($sql2); $res3 = mysql_query($sql3);  print "<table border=1 cellpadding=0 cellspacing=0>\n";  print "<tr>\n";  print "<td>合計</td>";  print "<td align=right>{$sql2}回</td>;"  print "</tr>\n";    print "<tr>"; print "<td>1</td>";  print "<td align=right>{$sql3}回</td>;"  print "</tr>\n";    print "<tr>\n";  print "<td>平均</td>";  print "<td align=right>{$sql1}</td>";  print "</tr>\n";  print "</table>\n"; mysql_free_result($res,&res2,&res3); mysql_close($conn); ?> </body> </html> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー seisekiテーブルにはnameとdayとscoreがあり、 nameはyamadatarouのようにローマ字で dayは20110110のように数字で scoreには1~4の数字が入っています nameは完全一致、dayは前方一致で sql1では数字の平均、sql2では合計回数、sql3では1の回数をカウントしています 30行目「$sql1 = select avg(score) ~ ~ ~」のあたりに記述エラーがあると表示されるので、 おそらく検索方法の文法が間違っているのですが、 色々調べてみても記述の仕方がこの方法以外見つかりません 何か記述方法の間違いや別の記述方法がありましたら、ご教授お願いいたします また、現在エラーは表示されていませんが、 print近辺も見ようみ真似での記述ですので、間違いなどがありましたら ご教授いただけないでしょうか

    • ベストアンサー
    • PHP
  • PHPとMySQLで配列で検索する方法

    プログラミング初心者です。 PHPとMySQLでデータベースを作成しています。 配列に格納したデータを既に登録してあるデータに参照して、日付と題名が同じものは登録しないようにしたいと思います。 以下がソースなのですが、2行目でエラーがでてしまいます。そうすればよいかご教授お願いします。 for($j=1; $j<$i; $j++){ $query ="select * from data where date=" . $date2[$j]; $result = mysql_query($query) or die(mysql_error()); $query2 ="select * from data where sub=" . $sub[$j]; $result2 = mysql_query($query2) or die(mysql_error()); if(mysql_num_rows($result) != 0 && mysql_num_rows($result2) != 0){ //登録しない } else{      //データベースに登録

    • 締切済み
    • PHP