Php 使用where子句和if语句的MySQL查询

Php 使用where子句和if语句的MySQL查询,php,mysql,if-statement,where-clause,Php,Mysql,If Statement,Where Clause,我又被MySQL查询卡住了,我想得到一些帮助 我正试图找到最好的方法来做到这一点。我想做的是检查$var='x',然后根据它运行另一个查询 守则的一部分: if ($var1 == '0' AND $var2 != '0' AND $var3 != '0' AND $var4 != '0') { echo $query = "SELECT * FROM table WHERE var1 = ''"; }elseif ($var1 == '1' AND $var2 != '0' AND $

我又被MySQL查询卡住了,我想得到一些帮助

我正试图找到最好的方法来做到这一点。我想做的是检查$var='x',然后根据它运行另一个查询

守则的一部分:

if ($var1 == '0' AND $var2 != '0' AND $var3 != '0' AND $var4 != '0') {
    echo $query = "SELECT * FROM table WHERE var1 = ''";
}elseif ($var1 == '1' AND $var2 != '0' AND $var3 != '0' AND $var4 != '0') {
    echo $query = "SELECT * FROM table WHERE var1 = '1'";
}elseif ($var1 != '0' AND $var2 == '0' AND $var3 != '0' AND $var4 != '0') {
    echo $query = "SELECT * FROM table WHERE var2 = ''";
}elseif ($var1 == '0' AND $var2 == '0' AND $var3 != '0' AND $var4 != '0') {
    echo $query = "SELECT * FROM table WHERE var1 = '' AND var2 = ''";
} etc..
联系很多。有更好的方法吗?几乎每个变量(总共7个)都有3个不同的选择。我不能把
var=$var
放在WHERE子句下,因为有时候当
var='0'
我指的是所有结果,所以我甚至没有把它放在那里

顺便说一下,这是一个筛选脚本/代码

这对你有意义吗?
谢谢

我认为这可以通过单个查询和改变WHERE条件来实现。您需要首先定义何时在WHERE子句中放入
var1='
。您应该在查询中逐一找出需要
varX='
的情况

$conds = array();
if ($var1 == '0' || $var2 == '0') {
  $conds[] = "var1 = ''"; // this should be the only point where var1 is included in your query, so you need to have every possible condition in this if part
}
if ($var3 == '0' && $var4 != '0') {
  $conds[] = "var3 = ''";
}
// ..etc..
$query = "SELECT * FROM TABLE WHERE " . implode(' AND ', $conds);
那么:

$where_parts = array();
if (isset($var1)) {
  if ($var1 == 0) { $var1 = ''; }
  $where_parts [] = "var1 = '" . $var1 . "'";
}
if (isset($var2)) {
if ($var2 == 0) { $var2 = ''; }
  $where_parts [] = "var2 = '" . $var2 . "'";
}
if (isset($var3)) {
if ($var3 == 0) { $var3 = ''; }
  $where_parts [] = "var3 = '" . $var3 . "'";
}
if (isset($var4)) {
if ($var4 == 0) { $var4 = ''; }
  $where_parts [] = "var4 = '" . $var4 . "'";
}

$query = "SELECT * FROM table WHERE " . implode(' AND ', $where_parts );

您是否可以只关注与查询相关的变量?例如:

$str = "";

# When will "var1" be in the query
switch($var1) {
  case '0' : $str .= " AND $var1=''"; break;
  case '1' : $str .= " AND $var1='1'"; break;
}

# When will "var2" be in the query
switch($var2) {
  case '0' : $str .= " AND $var2=''"; break;
  case '1' : $str .= " AND $var2='1'"; break;
}

...

# If not empty then remove the first " AND "
if(!empty($str)) {
    $str = substr($str,4);
}

# Final query is a lot of concatenated strings
$query = "SELECT * FROM table WHERE $str";

它可能不是最优化的代码,但很容易理解。

例如,
$var1==0
$var2==0
会发生什么。。每个组合是否都有if语句?如果不是的话,你可以用| |(或)Yeah-“每个组合都有一个If语句,非常感谢你的帮助,伙计,但对我来说,它似乎比其他答案要复杂一点。我选择的答案几乎一样!谢谢你的帮助!(这似乎是完全一样的事情,但你的方式得到了一些额外的线lol)工作像一个魅力!Tyvm!