0

これを機能させるのに問題があります。検索クエリからの条件情報に基づいて発生する必要がある WHERE ステートメントが複数あります。LIKEその中で、ステートメントを機能させることができないようです。

データベースでは、STREET_NUM&STREET_NAMEは異なる行にあります。1つの入力フィールドを使用して、呼び出されたものをチェックしています$address

MIN&を機能させるのにも苦労していMAXます。

クエリは次のとおりです。

$sql = "SELECT * FROM arc_property_res WHERE ( arc_property_res.STATUS = 'Active'";
        if(!empty($_GET['city'])){
            // City only query!
            $sql .= "AND arc_property_res.CITY = '{$_GET['city']}'";
        }
        if(!empty($_GET['neighborhood'])){
            // Hood only query!
            $sql .= "AND arc_property_res.SUBDIVISION = '{$_GET['neighborhood']}'";
        }
        if(!empty($_GET['mls-number'])){
            // MLS only query!
            $sql .= "AND arc_property_res.MLS_ACCT = '{$_GET['mls-number']}'";
        }
        if(!empty($_GET['min-price']) && !empty($_GET['max-price'])){
            // MIN AND MAX only query!
            $sql .= "AND arc_property_res.LIST_PRICE = MIN('{$_GET['min-price']}') MAX('{$_GET['max-price']}')";
        }
        if(!empty($_GET['num-of-beds'])){
            // BEDS only query!
            $sql  .= "AND arc_property_res.BEDROOMS = '{$_GET['num-of-beds']}'";
        }
        if(!empty($_GET['num-of-baths'])){
            // BATHS only query!
            $sql  .= "AND arc_property_res.BATHS_FULL = '{$_GET['num-of-baths']}'";
        }
        if(!empty($_GET['mls-number'])){
            // BATHS only query!
            $sql  .= "AND arc_property_res.MLS_ACCT = '{$_GET['mls-number']}'";
        }
        if(!empty($_GET['address'])){
            $sql  .= "AND arc_property_res.STREET_NUM LIKE '%{$_GET['address']}'";
            $sql  .= "OR arc_property_res.STREET_NAME LIKE '{$_GET['address']}%'";
        }

    $sql .= ") ORDER BY {$orderby}{$price_order}{$comma}{$list_date}";
4

3 に答える 3

1

$sql .= "AND arc_property_res.LIST_PRICE = MIN('{$_GET['min-price']}') MAX('{$_GET['max-price']}')";

min 関数と max 関数は、データベース内のフィールドの最小値と最大値を取得する場合に使用します。

希望するのは、定価を比較して、ユーザーが指定した最小値と最大値の間に収まるかどうかを確認することです。

 $sql .= " AND arc_property_res.LIST_PRICE >= '{$_GET['min-price']}' AND arc_property_res.LIST_PRICE <= '{$_GET['max-price']}'";
于 2013-01-14T18:35:03.627 に答える
1

必要なのは、を囲む括弧だけだと思いますarc_property_res.STREET_NUM。さらに、構文エラーが発生しないように、コード全体の各行の周りにスペースを追加することをお勧めします。

if(!empty($_GET['address'])){
    $sql  .= " AND (arc_property_res.STREET_NUM LIKE '%{$_GET['address']}' ";
    $sql  .= " OR arc_property_res.STREET_NAME LIKE '{$_GET['address']}%') ";
}
于 2013-01-14T18:27:48.163 に答える
1

クエリにある明らかな「Bobby Tables」の問題に加えて、当面の問題は、の前にスペースを挿入しないことですAND。これにより、次のようなクエリが生成されます。

AND arc_property_res.BEDROOMS =3AND arc_property_res.BATHS_FULL =2

3と- の間にスペースがないことに注意してANDください。構文エラーです。

クエリのパラメーター化を検討し、に設定されているパラメーターを無視するように変更する必要がありますNULL

SELECT * FROM arc_property_res WHERE ( arc_property_res.STATUS = 'Active'
AND (arc_property_res.CITY = @cityParam OR @cityParam is NULL)
AND (arc_property_res.SUBDIVISION = @subdiv OR @subdiv is NULL)
...
)

この変更により、実際に設定されたパラメーターの数に関係なくクエリを同じに保つことができ、ほとんど同じ時間をかけて同じ結果を得ることができます。

于 2013-01-14T18:28:55.963 に答える