我有 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/