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

标签 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,看起来该日期被放弃了。

我想获得建议,提前致谢。

编辑
我生成的查询是:

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%' 

最佳答案

您有代码行:

$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连接。也许用户实际上应该可以选择指定如何连接这些条件。

关于php - 使用 OR 条件组合查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741794/

相关文章:

php - 搜索数据库 php pdo mysql

mysql - SQL 和带有别名的 LIKE

mysql - Adventure Works 2014 SQL 查询

mysql - SELECT/GROUP BY - 时间段(10 秒、30 秒等)

javascript - codeigniter 中的依赖下拉列表

php - mockery->shouldReceive() 在不应该通过的时候通过了?

mysql - 根据经纬度查找用户

mysql - 不使用索引的简单 MySQL WHERE 查询

php - PHP通过查询显示xml中的数据

php - 强制 silex 框架生成 https 链接