使用OR条件的组合查询数据库

时间:2013-05-24 18:53:13

标签: php mysql

我正在尝试使用OR条件的组合对数据库执行查询。 通过在数据库中填写带有相应字段的表单,在收到数据后,我以这样的方式放置查询:

if ($state != '') {
    $xstate = " `State` LIKE '%" . $state . "%' ";
    $Isall = '0';
} else {
    $xstate=" `State` LIKE '-' ";
}

if ($dateStart != '' && $dateEnd != '') {
    $xdateStart = " `datefill`  BETWEEN '" . $dateEnd . "' AND '" . $dateStart . "'";
    echo $xdateStart;
    $Isall = '0';
}

正如您所看到的,我检查字段是否为空然后我开始构建查询,在询问所有相关问题后查询将如下:

$query="SELECT " .$field  . "  FROM  issueslog WHERE  ".$xdateStart." OR " .$xCode   ."   ;

等等,我现在的问题是当我填写一些字段时,例如xCode现在是数据让我们说“900”和dateStart,你可以看到上面是
      $xdateStart=" datefill BETWEEN '".$dateEnd."' AND '".$dateStart."'";

所以我所理解的是它将获取与特定日期之间的代码“900”相对应的数据,但我得到的结果是只对xCode 900进行了压缩,似乎日期被放弃了。

我想得到建议,先谢谢。

EDIT
我生成的查询是:

SELECT *  FROM  issueslog WHERE   `datefill`  BETWEEN '2013-05-24' AND '2013-05-24' OR  `xCode` LIKE '-'  OR  `Address` LIKE '-'  OR  `tname` = '-'  OR  `fname` LIKE '-'  OR  `Phone1` LIKE '-'  OR  `State` LIKE '-'  OR  `City` LIKE '%TelAviv%' 

1 个答案:

答案 0 :(得分:0)

你有代码行:

$query="SELECT " .$field  . "  FROM  issueslog WHERE  ".$xdateStart." OR " .$xCode   ." 

然后你说“所以我理解的是它将获取与特定日期之间的代码”900“相对应的数据”。

很简单。你的理解是错误的。无论日期如何,该代码都将获取与日期条件匹配的所有行,而不管xCode 加上与xCode条件匹配的所有行。如果您想同时使用两者,那么您需要and

$query="SELECT " .$field  . "  FROM  issueslog WHERE  ".$xdateStart." AND " .$xCode   ." 

您的最终查询是

SELECT *
FROM  issueslog
WHERE   `datefill`  BETWEEN '2013-05-24' AND '2013-05-24' OR  `xCode` LIKE '-'  OR  `Address` LIKE '-'  OR  `tname` = '-'  OR  `fname` LIKE '-'  OR  `Phone1` LIKE '-'  OR  `State` LIKE '-'  OR  `City` LIKE '%TelAviv%' 

我认为你想要的是:

SELECT *
FROM  issueslog
WHERE  ( `datefill`  BETWEEN '2013-05-24' AND '2013-05-24') AND
       (`xCode` LIKE '-'  OR  `Address` LIKE '-'  OR  `tname` = '-'  OR  `fname` LIKE '-'  OR  `Phone1` LIKE '-'  OR  `State` LIKE '-'  OR  `City` LIKE '%TelAviv%')

我的猜测是,如果任何合理的用户在表格的行上放置日期范围,该用户将希望该日期范围内的行。也许其他条件可以通过OR连接。也许他们应该通过AND连接起来。也许用户实际上可以选择指定如何连接这些条件。