0

PHP 検索ページでは、SQL クエリを使用して、設定された基準に基づいてプロパティを検索します。以下の例では、通り「Harrison Road」が選択されています。

search.php?city=1&rooms=3&rooms_upper=7&price_lower=55&price_upper=100&streetname=Harrison%20Road

通り名を空白のままにして、以下のようにすべてのレコードを選択する方法を探しています。

 search.php?city=1&rooms=3&rooms_upper=7&price_lower=55&price_upper=100&streetname=

SELECT ALL を指定するために、他の SQL コマンドと同様に ' * ' 記号を使用しようとしましたが、このインスタンスでは機能しません。

問題は、ストリートオプションが空白のままになっていると検索結果が表示されないことです。

空のストリート基準で検索を実行しようとしている理由は、ユーザーがページのドロップダウン オプションを使用して特定のストリートを選択する前に search.php が読み込まれるためです。

指定された最初の基準を使用して、すべてのレコードを検索したいと思います:rooms、rooms_upper、price_lower、price_upper

ユーザーが特定の 'streetname' を指定して検索条件を絞り込む前にすべてのレコードを表示するために、標準の検索ページの読み込みは可能な限り広い検索条件 (3 < 部屋 < 7 ) および (£55 < 家賃 < £75) で残されています。必要に応じて。

どうもありがとう!ジャンクロード

完全な SQL は次のとおりです。

    $sql=mysql_query("SELECT main_table.housenumber, main_table.housenumber, main_table.streetname,
                      max(main_table.rent) AS reviews_rent, main_table.rooms AS reviews_rooms,main_table.average, 
                      houses.houseID, houses.path, houses.rooms AS houses_rooms,houses.rent AS houses_rent
                    FROM main_table 
                      LEFT JOIN houses ON main_table.housenumber = houses.housenumber 
                           AND main_table.streetname = houses.streetname
                    WHERE main_table.streetname='$page_streetname' 
                        AND main_table.city=$city 
                        AND main_table.verify='1' 
                        AND main_table.rooms>='$rooms' 
                        AND main_table.rooms<='$rooms_upper' 
                        AND main_table.rent>=$price_lower 
                        AND main_table.rent<=$price_upper
                    GROUP BY main_table.housenumber, main_table.streetname 
                    ORDER BY average DESC, houseID DESC, reviewID DESC;");

WHERE 句に通り名を残したいが、空欄のままで検索を制限したくない。

4

2 に答える 2

1

クエリを動的に作成するのはどうですか。

WHERE 句に通り名を指定せずにベース クエリを設定しますが、sprintf 文字列タグを含めます。次に、$page_streetname に値がある場合は、ストリート名の選択をクエリに動的に追加するか、そうでない場合は何も追加しません。

$q = "
SELECT main_table.housenumber, 
       main_table.streetname, 
       Max(main_table.rent) AS reviews_rent, 
       main_table.rooms     AS reviews_rooms, 
       main_table.average, 
       houses.houseid, 
       houses.path, 
       houses.rooms         AS houses_rooms, 
       houses.rent          AS houses_rent 
FROM   main_table 
       LEFT JOIN houses 
              ON main_table.housenumber = houses.housenumber 
                 AND main_table.streetname = houses.streetname 
WHERE  %s
       main_table.city = $city 
       AND main_table.verify = '1' 
       AND main_table.rooms >= '$rooms' 
       AND main_table.rooms <= '$rooms_upper' 
       AND main_table.rent >=$ price_lower 
       AND main_table.rent <=$ price_upper 
GROUP  BY main_table.housenumber, 
          main_table.streetname 
ORDER  BY average DESC, 
          houseid DESC, 
          reviewid DESC";

$q = isset($page_streetname) 
          ? sprintf( $q, "main_table.streetname = '$page_streetname' AND " )
          : sprintf( $q, '');
于 2013-10-14T21:52:39.747 に答える
0

これは PHP で簡単に解決できます ( は必要ありませんsprintf())。

<?php

$page_streetname = empty($page_streetname)
  ? null
  : "AND main_table.streetname = '{$page_streetname}'"
;

$result = mysql_query(
  "SELECT
    main_table.housenumber,
    main_table.housenumber,
    main_table.streetname,
    max(main_table.rent) AS reviews_rent,
    main_table.rooms AS reviews_rooms,
    main_table.average,
    houses.houseID,
    houses.path,
    houses.rooms AS houses_rooms,
    houses.rent AS houses_rent
  FROM main_table
    LEFT JOIN houses
      ON main_table.housenumber = houses.housenumber
        AND main_table.streetname = houses.streetname
  WHERE
    main_table.city = '{$city}'
    AND main_table.verify = 1 
    AND main_table.rooms >= '{$rooms}'
    AND main_table.rooms <= '{$rooms_upper}'
    AND main_table.rent >= {$price_lower}
    AND main_table.rent <= {$price_upper}
    {$page_streetname}
  GROUP BY
    main_table.housenumber,
    main_table.streetname 
  ORDER BY
    average DESC,
    houseID DESC,
    reviewID DESC"
);

?>
于 2013-10-14T21:56:01.263 に答える