如何优化mysql查询

3

我用于搜索的MySQL查询语句是:

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

这会强制要求用户在表单中输入位置、最小和最大价格。 我想要一个查询,可以让用户输入位置或最大和最小价格,同时允许用户通过两个字段进行搜索。该怎么做?

解决问题时你尝试过什么?请提供一些代码。 - Alma Do
您可以在PHP代码中检查这些值(位置、最低价格和最高价格)的可用性,然后分别生成查询字符串。这比在MySQL查询中使用条件语句更好。如果您想要更具体的答案,请发布一些代码片段。 - HILARUDEEN S ALLAUDEEN
3个回答

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

这应该对你有用:

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

干杯


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接