如何在mysql中优化查询


How to optimize queries in 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()); ;

这就迫使人们在表格中同时输入位置和最低和最高价格。我想要一个查询,可以让用户输入位置或最高和最低价格,并允许用户按两个字段搜索。我该怎么办?

当我用可选字段生成查询时,我会为每个字段创建一个数组,然后用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");

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());

干杯

作为这些答案的补充,您不应该信任用户的输入,应该转义给定的字符串,或者使用PDO而不是mysql_函数