検索結果の絞込み方法を教えてください

このQ&Aのポイント
  • 検索条件で絞り込んだ結果に対して、さらに絞込みをかける方法を教えてください。具体的な例として、「関東」を検索条件にして絞り込んだ後、テキストフィールドに「東京」と入力して絞り込む場合、セッションを使った絞込み方法ではうまくいかない問題が生じます。戻るボタンを押してから「埼玉」と入力して絞り込む場合、「東京」で絞り込んだ結果を元に検索しているため、意図した結果が表示されません。
  • 不動産などのサイトでは、パラメーターを使って検索結果の絞込みを行うことがあります。セッションを使用する方法ではなく、パラメーターを使うことで簡単に絞込みを行うことができます。
  • 以上のような問題を解決するためには、セッションではなくパラメーターを使用して絞込みを行う方法が有効です。パラメーターを使うことで、検索結果に対して何度も簡単に絞り込みをかけることができます。
回答を見る
  • ベストアンサー

検索結果に対する絞込み

お世話になってます。 検索条件で絞り込んだ結果に対して、さらに絞込みをかける方法を教えてください。 検索条件を持ち歩いてもいいのですが、30個近くあるのでセッションを使うことにしたのですが、うまくいきません。 具体的には ID 名前 住所 地区 1 山田 東京 関東  2 佐々木 東京 関東 3 鈴木 埼玉 関東 4 岡田 大阪  関西 最初に「関東」を検索条件に検索すると表示画面に3件表示されます。 セッションテスト1($_SESSION["test1"])には検索後の3件のIDを登録しました。 次に表示画面には検索条件のテキストフィールドがあり、「東京」と入力すると2件表示されます。 具体的にはセッションテスト1に値がセットされていれば $kensaku=$_SESSION["test1"]; $sql="SELECT *from test1 where ID=$kensaku and 住所=東京"; としています。 ここまでは絞込みがうまくいき表示できたのですが 戻るボタンで戻ったとき、「埼玉」といれて検索をかけると、1件表示させたいのですが $_SESSION["test1"]に値がセットされていて、 先ほど「東京」で絞り込んだ結果に検索をかけているので、表示されません。 不動産などのサイトを見るとパラメーターで渡しているのですが、セッションを使う方法ではできませんでしょうか。 わかりにくい文章で申し訳ないのですが、 検索結果に対して、さらに検索を何度もかけるという方法を教えていただければ助かります。 よろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

連投すいません。 面白そうだったので動かしてみました。 <?php $level = empty($_POST['level']) ? 0 : $_POST['level']; ?> <form method="post" action=""> <input type="text" name="keyword" value="" /> <input type="hidden" name="level" value="<?php echo ($level + 1); ?>" /> <input type="submit" /> </form> <?php session_start(); $condition = isset($_SESSION['keyword']) ? $_SESSION['keyword'] : array(); $condition = array_slice($condition, 0, $level); if (!empty($_POST['keyword'])) { $condition[] = $_POST['keyword']; } $condition = array_slice($condition, 0, $level); $_SESSION['keyword'] = $condition; print_r($_SESSION['keyword']); // ご期待の動作か分かりませんが、参考までにノシ

99Micchi
質問者

お礼

tany180sxさんご回答ありがとうございました。 最初にお答えいただいた検索回数を保持するだけでは、上記のようなコードはまったく思いつきませんでした。 提示していただいて大変勉強になりました。 一度「東京」で検索後、戻るボタンで戻り「埼玉」と入力したときの動きは期待通りなのですが、 「東京」で検索後、さらに「埼玉」と入力した場合の動きは該当件数ゼロとしたいと思い、 キーワードのほかに検索回数($level)もセッションで管理し、 画面を戻ってからきたのか、再度絞り込みをかけたのか判断することで解決しました。 パラメーターを渡す方法でやり直そうかと思っていたので、本当に助かりました。 ありがとうございました。

その他の回答 (2)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

#1, 一部訂正。 $level = $_POST['level'] + 1;// かな・・

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

セッションに検索回数を保持して回数をhiddenで出力しておくとか。 思いつきですけど。 $_SESSION['test1'] = array(1=>'関東', 2=>'東京'); $level = count($_SESSION['test1']); <input type="hidden" name="level" value="<?php echo $level; ?>" /> $condition = array(); foreach ($_SESSION['test1'] as $key => $val) {  if ($key > $_POST['level']) {   break;  }  $condition[] = $val; }

関連するQ&A

  • 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千件ほどのデータからいろいろな条件でデータの絞込みをしたいの ですが、初歩的な質問で分かりにくいかもしれませんが、御指導 お願いします。 全国の求人情報サイトのように、 市町村テーブル   企業テーブル  条件テーブル  時給     中京区       花屋      毎日      800円以上 下京区       八百屋     週末だけ    900円以上 上京区       魚屋      平日昼間   1,000円以上 左京区       文房具店    夜専門 右京区       旅館 こんな感じでSQLでテーブルを作っています。 これを検索で絞込みたいのですが、 市町村→企業→条件→時給と全部を絞り込んだり、1つだけの条件 で絞込み方法はわかるのですが、 ある場合は二つだけ、例えば企業と時給で検索をかけたり ある場合は、市町村と条件と時給で検索をかけたりして 絞込み結果を出したいのですが、 値のない項目があるとその項目の該当条件がないために 検索結果がなしになります。 同じページにリンクを貼って、GETで値を渡して、絞込みを したいと思っているのですが、よいお知恵をお願いします。 一番基礎的なところからご指導を頂けるとうれしいです。 こんな感じのHPが理想です。 http://www.jobengine.jp/search.html?p=lsk26

    • ベストアンサー
    • PHP
  • PHPで絞り込み検索結果の件数を表示する

    同じ質問が数多くあるようですが、どうにもうまくいかない為恐縮ですが質問させて頂きました。 私はPHPとMYSQLを使ってホームページを作成しております。 やりたいことは、DBのTBに数百ある情報をPHPで幾つかの条件で絞り込み検索をかけることで、それ自体はできたのですが、何件の結果が抽出されたかを表示することができません。 例:○○件の検索結果が表示されました。 ←こんな感じにしたいのです。 他の質問を参考に以下のように記述をしたのですがどうにもうまくいきません。 $sql ="SELECT*FROM estate WHERE 価格 BETWEEN $price1 AND $price2'"; print 'sql_num_fields( $sql ) . "\n"件の検索結果が表示されました'; どのような点が問題なのか教えていただけますでしょうか? できればソースを教えていただけると助かります。

    • ベストアンサー
    • PHP
  • PHPのセッション変数 絞り込み検索

    PHP Version 5.1.6 flash actionscript2.0 最初の検索条件をセッション変数['first']に保存し、 (GETにより、種別を判断しています。 ~~/index.php?kind=A&value=1という形) 絞込検索時(値はページ内のチェックボックスからPOSTで受け取り、hiddenタグで、type=newを受け取ります。)に 最初の検索条件をセッション変数['first']から取り出すようにしています。 また絞り込み検索時でなければ、とりあえずいったん保存用の セッション変数['first']を初期化しています。 ここで、ページ内にフラッシュのNEWというボタンがあり、その中に var kind = "new"; get_URL("http://~~/index.php", "_blank","GET"); とだけ記述して、ページへkind=newという検索種別を渡すように しているのですが、挙動がおかしくなる場合があります。 [正常な動きをする場合] 1、ページ内のNEWのフラッシュボタンを押す。 予想通りの最初の検索ができる。 (この時点で、セッション変数['first']に"new"が入っているのは 確認済みです。) 2、ページ内のチェックボックスで、絞込み検索をかける。 予想通り、最初の検索条件+絞り込み条件を加えた検索ができる。 [異常な動きをする場合] 1、ページ内のリンクから最初の検索をする。 (~/index.php?kind=A&value=1)を押す。 (この時点で、セッション変数['first']に"A"が入っているのは 確認済みです。) 2、ページ内のチェックボックスで、絞込み検索をかける。 予想通り、最初の検索条件+絞り込み条件を加えた検索ができる。 3、ページ内のフラッシュのNEWボタンを押す。 予想通り、再度別条件での検索ができる。 4、ページ内のチェックボックスで、絞込み検索をかける。 なぜか、セッション変数['first']に、"A"が入ったままになっている。 よって、2の検索に変わってしまう。 ただし、このフラッシュボタンからではなく、たとえば ~/index.php?kind=new というGETで送るタイプのリンクからでは、予想通りの動きをします。 このあたりの挙動につきまして、ご教授いただければ幸いです。 下記コードです。(処理に関係ない部分は省略しております。) session_start(); session_register("first"); //パラメータを受ける。 //絞込検索でなければ、セッション変数を初期化 if($_REQUEST['kind'] != "more") { unset($_SESSION['first']; } switch($_REQUEST['kind']){ case "A": $_SESSION['first']= "A"; break; case "new": $_SESSION['first']= "new"; break; //絞込み検索 case "more": break; }

    • 締切済み
    • PHP
  • SQLでの絞り込み検索

    はじめて参加します。 SQL初心者の古屋と申します。 絞り込み検索をしたいのですが、先に進まず困っています。 どうぞアドバイスをよろしくお願いします。 あるテーブルから1回目の検索条件でヒットしたものを表示させる。 次に、その中から2回目の検索条件を入力して、結果を表示させる。 (ポイントは、一度検索した結果を出してから、次の検索条件を入力させたい) この絞り込みを何回でもやりたいのです。 一時テーブルも試したのですが、検索する回数分一時テーブルが必要になるのではだめだと思い、 断念しました。 テーブル値関数を使ったら良さそうだと思ったのですが、能力不足のため先に進まず困っています。 どうかアドバイスをよろしくお願いします。 環境は、Windows 2000 Serverで、SQL Server 2000を使用しています。

  • エクセルで絞込み検索をしたいのですが。

    エクセルで絞込み検索ができないものかと頑張っているのですが知識が足りずできません。 具体的にどういった動作をさせたいかというと、画像を参照していただき、、 ”お客様登録シート”側にそれぞれ情報を登録して、そのデータを”入力シート”側の赤く塗りつぶしたセルそれぞれに検索結果を表示させたいのです。 黄色く塗りつぶしたセルに検索ワードを入力して検索。 登録年月日、又はフレームNo、もしくはその両方に該当する行の情報を出したい、ということです。 そのような、絞込み検索かつ指定した複数のセルにそれぞれの結果を表示させることは可能なのでしょうか? できれば関数でしたいのですが、マクロでないとできないということであればその方法を教えていただきたいです。 関数は少々かじっている程度。 マクロについてはほぼ初心者です。 文才もなく伝わりにくい説明かと思いますが、わかりやすいご回答をよろしくお願いします。

  • MSアクセスで絞り込みを繰返すには?

    MSアクセスについての質問です。 現在のフォームに表示されているレコードを対象にして、絞り込みをしたいと思っています。 性別で絞り込み→その結果に対して地域で絞り込み→その結果に対して年齢で絞り込み といったように、絞り込みを柔軟に何度も付け加えるというのが目標です(amazonの絞り込みのイメージです)。 そこで、formのレコードセットを利用してできないかと考え、以下のようなものを書いてみました。 Dim mycriteria As String mycriteria = "ID = 1" Me.Recordset.FindFirst mycriteria '動作テスト用 Me.Recordset.Filter = mycriteria '本題 実行すると、ID1番へのレコードの移動(findfirst)は起きるのですが、 ID1番だけに絞り込み(filter)はなされません。 filterに対する理解が間違っているのでしょうか。 ご指導願えれば幸いです。 また、ほかに定番の手法などがあれば、お教え願えれば幸いです。

  • 文字検索、列をまとめたい

    以下のようなテーブルで「test_id」ごとに文字列(contents)をまとめたいのです。 [テーブル1] test_id | name 1 山田 2 佐藤 3 鈴木 [テーブル2] id | test_id | contents 1 1 東京は晴れです。 2 1 電車です。 3 2 埼玉は晴れです。 4 3 電車です。 検索処理でテーブル1と2を結合しの「name」を表示します。 contentsが「東京」「電車」でand検索をすると0件になり、or検索をすると3件(名前は2人)ヒットするのですが、 「東京」「電車」としたときtest_idの「1」をヒットさせたいのです。 test_idをgroup byでsum(数値)のように文字列を指定するには どのようにすればいいのでしょうか。concatを使ってみたのですが、 (contentsのみを指定したから?)結果は得られず、わかりませんでした。 $sql="SELECT id,test_id,concat(contents), FROM テーブル1 as t1 left join テーブル2 as t2 on t1.test_id=t2.test_id where $where group by t2.Itest_id"; MySQL:4.0.27です。 よろしくお願いします。

  • 住所録絞り込みの不具合

    筆王Ver.24 住所録に312登録してうち116件を出力先としています。絞り込みの条件として「出力先」を指定して絞り込みを行うと104件しか表示されません。 また出力先116件に年賀状を連続印刷すると104件しか印刷されません。 追加で12件を印刷して「2020年の年賀状を送った先」で絞り込んでもやはり104件しか表示されず追加分が反映されません。個々の住所録には発送記録として2020が赤字になっているのですが。 どこかおかしいと思われますので解決方法を教えてください ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • 絞り込み後の件数を数えたいのですが・・。

    すいません。今PHPとデータベースを勉強中なのですが、 $st = $pdo->query("SELECT * FROM udon WHERE not abc = '111' limit 5, 10 "); 例えば上記のような絞り込みをした後、絞り込んだ後の数を数えたいのですがそのような 事はできますでしょうか? 絞り込み後の検索結果が5件以上の場合、残りを「次のページ」などのように分けて表示させたいのですがデータベースの絞り込み後の数を数える方法が分からないため先に進めません。 わかる方いましたら教えてください。

    • ベストアンサー
    • MySQL

専門家に質問してみよう