首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带where子句和if语句的MySQL查询

问带where子句和if语句的MySQL查询
EN

Stack Overflow用户
提问于 2014-03-27 22:09:55
回答 3查看 447关注 0票数 0

我再次陷入了MySQL查询中,我希望得到一些帮助。

我正试图找到最好的方法来做这件事。我想要做的是检查$var = 'x‘,并在此基础上运行不同的查询。

守则的一部分:

代码语言:javascript
复制
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'是指所有的结果,所以我甚至不把它放在那里。

顺便说一下,这是一个过滤脚本/代码。

这对你来说有意义吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-27 22:18:43

我认为这可以通过一个查询和变化的条件来完成。您需要首先定义何时将var1 = ''放在WHERE子句中。当您在查询中需要varX = ''时,您应该逐一查找这些情况。

代码语言:javascript
复制
$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);
票数 2
EN

Stack Overflow用户

发布于 2014-03-27 22:29:03

不如:

代码语言:javascript
复制
$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 );
票数 0
EN

Stack Overflow用户

发布于 2014-03-27 22:41:24

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

代码语言:javascript
复制
$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";

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22700283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档