Php 使用或条件组合对数据库进行查询
我正在尝试对一个数据库执行一个查询,该数据库具有或条件的组合。 通过使用数据库中的相应字段填写表单,在接收到数据后,我以如下方式进行查询:Php 使用或条件组合对数据库进行查询,php,mysql,Php,Mysql,我正在尝试对一个数据库执行一个查询,该数据库具有或条件的组合。 通过使用数据库中的相应字段填写表单,在接收到数据后,我以如下方式进行查询: if ($state != '') { $xstate = " `State` LIKE '%" . $state . "%' "; $Isall = '0'; } else { $xstate=" `State` LIKE '-' "; } if ($dateStart != '' && $dateEnd != '
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介于“.$dateEnd.”和“.$dateStart.””之间代码>
所以我的理解是,它将在特定日期之间获取与代码“900”对应的数据,但我得到的结果是Coresponde仅包含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条件匹配的所有行,而不考虑日期。如果您想同时使用这两种方法,则需要和:
$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%')
我的猜测是,如果任何合理的用户将日期范围放在表中的行上,那么该用户只需要该日期范围中的行。可能其他条件可以通过或连接。也许它们应该通过和连接起来。也许用户实际上应该可以选择指定如何连接这些条件。看起来像是您想要的,而不是ORIf,然后查询不是一般的感觉,我会问一个关于插入的每个字段的问题,通过这个问题到查询中,它还没有结束。@Ofiratia-您可以将生成的查询添加到问题中吗?您可能希望将每个标准都用括号括起来,以确保优先级也正确,并且优先级高于OR@andrewsi当然,您现在可以看到生成的查询。它可能是运行的顺序。您可能需要使用以下行:$query=“SELECT”。$field。“来自issueslog,其中(“.xdateStart.”或“.xCode”。" ; 注意括号的位置。试着把它们移动到对你有意义的地方。我这样做了,但没有结果,只是给出了表中的所有数据,没有任何结果filtering@OfirAttia . . . 最后一个带有AND-between子句的查询将过滤器置于datefill
上。除非所有行的日期相同,否则不应获取表中的所有行。