1

データベースを検索するために SQL クエリを実行しています。現在、価格を比較するまですべてを検索できます。

価格比較なしの作業コード

$query = "SELECT * FROM propertie_ids WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom');

価格比較で壊れたコード

$query = "SELECT * FROM propertie_ids WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') AND price BETWEEN ('0') AND  ('10000000000')";

これが機能しない理由を確認しましたが、すべてのテーブルに正しい名前が付けられています。

4

3 に答える 3

1

一重引用符は SQL の文字列を表すため、それらを使用すると、クエリで辞書式の比較が行われます。それらを削除すると、おそらく意図した数値比較が得られます。priceさらに、文字列として持っているため、おそらくそれもキャストする必要があります。

$query = "SELECT * FROM propertie_ids WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') AND CAST (price AS DECIMAL) BETWEEN (0) AND  (10000000000)";
于 2013-10-07T09:07:13.450 に答える
1

価格は小数/倍数/通貨である必要があると思います。そして、ここで文字列値をテストしています!

$query = "SELECT * FROM propertie_ids 
WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') 
AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') 
AND price BETWEEN 0 AND 10000000000";

また、価格が文字列に格納されている場合は、2 つの文字列の間に文字列を指定できないため、変換する必要があります。

$query = "SELECT * FROM propertie_ids 
WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') 
AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') 
AND CAST(price as DECIMAL(10,2)) BETWEEN 0 AND 10000000000";
于 2013-10-07T09:07:38.820 に答える