mysql - 优化 SQL 查询

标签 mysql sql optimization

我有 5 个下拉列表,用户可以从中选择值以从表中获取数据。下拉列表的值是来自表的不同列的不同值。每个下拉菜单也有一个选项“ALL”。我将用户选择存储在 5 个变量中,即 variablename , variablename1 等等......默认情况下下拉值将是 ALL ......

目前我正在使用 32 个不同的查询,带有 if 和 else-if 条件来获取数据.. 即

if($variablename=="ALL" && $variablename2=="ALL" && $variablename5=="ALL" && $variablename6=="ALL" && $variablename7=="ALL")
{ $query="SELECT * FROM table ....}


  else if($variablename!="ALL" && $variablename2!="ALL" && $variablename5!="ALL" && $variablename6!="ALL" && $variablename7!="ALL")
        { $query= "SELECT * FROM table WHERE   abc = '$variablename' and bcd = '$variablename1' and cde= '$variablename2'
    and def= '$variablename4' and efg= '$variablename4' ; ...}

注意 !=ALL 表示用户已从下拉列表中选择除 ALL 选项之外的一些值。

通过这种方式,我必须进行 32 次不同的查询。我怎样才能做更多的优化查询来摆脱 32 个不同的查询?我希望你能明白我的问题..

最佳答案

$query = "SELECT * FROM table";
$conditions = Array();
if ($variablename !== "ALL") {
  $conditions[] = "abc = '" . mysqli_real_escape_string($variablename) . "'";
}
if ($variablename2 !== "ALL") {
  $conditions[] = "bcd = '" . mysqli_real_escape_string($variablename2) . "'";
}
// ...
if ($conditions) {
  $query .= "WHERE " . implode(" AND ", $conditions);
}

小心 Bobby Tables !此外,如果您有一个数组而不是五个不同的变量,那就更好了。

关于mysql - 优化 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175508/

相关文章:

mysql - 忘记临时mysql密码

php - WordPress 数据库数组不传递数据

optimization - 优化SPARQL查询

java优化挑剔: is it faster to cast something and let it throw exception than calling instanceof to check before cast?

optimization - 使 D 程序更快的方法

Mysql查询查找手机号码

php - 数据库中的简单 PHP 搜索不会显示结果

python - 如何处理我的应用程序中的 AWS-RDS 连接?

mysql - 具有 max 和多个连接的 sql

sql - 在 SQL Server 中将位值返回为 1/0 而不是 True/False