2013-08-16 29 views
3
優化查詢

我對搜索MySQL查詢是:如何在mysql中

$result = mysql_query("SELECT * FROM room_tb WHERE location ='{$location}' AND price BETWEEN '$minprice' AND '$maxprice' ")or die('Could not connect: ' . mysql_error()); ; 

這使得強迫進入兩個位置和最大和最小价格形式。 我想要一個查詢,可以讓用戶輸入位置或最大和最小价格,以及允許用戶通過這兩個字段進行搜索。我該怎麼辦?

+0

你在解決你的問題時嘗試過什麼?請提供一些代碼。 –

+0

您可以在PHP代碼中檢查這些值(位置,最小价格和最大價格)的可用性,然後分別生成查詢字符串。這比在MySQL查詢中使用條件要好。如果你想要更具體的答案,只需發佈​​一些代碼片段。 –

回答

0

Thsi應該爲你做它:

$query = "SELECT * FROM room_tb "; 

if($location){ 
$query .= " WHERE location ='{$location}' "; 
} 

if(($minprice)&&($maxprice)&&(!$location)){ 
$query .= " WHERE price BETWEEN '$minprice' AND '$maxprice'"; 
} 

if(($minprice)&&($maxprice)&&($location)){ 
$query .= " AND price BETWEEN '$minprice' AND '$maxprice'"; 
} 

$result = mysql_query($query)or die('Could not connect: ' . mysql_error()); 

乾杯

4

當我產生我和可選字段的查詢,我創建的每個字段的數組,然後加入他們與implode

$query_array = array(); 
$queries_stringed = ''; 

if(strlen($location) > 0){ 
    $query_array[] = "location ='{$location}'"; 
}; 
if(strlen($minprice) > 0 && strlen($maxprice) > 0){ 
    $query_array[] = "(price BETWEEN '$minprice' AND '$maxprice')"; 
}; 
if(!empty($query_array)){ 
    $queries_stringed = "WHERE ".implode(" AND ", $query_array); 
}; 

$result = mysql_query("SELECT * FROM room_tb $queries_stringed"); 
+1

在運行查詢之前,您需要確保'$ queries_stringed'不是空的,否則會出現查詢錯誤。 – jszobody

+0

謝謝,我改變了代碼以反映這一點。 –

0

作爲這些答案的補充 - 你不應該相信用戶的輸入,應該逃避給定的字符串或使用PDO而不是mysql_函數