Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用或条件组合对数据库进行查询_Php_Mysql - Fatal编程技术网

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
上。除非所有行的日期相同,否则不应获取表中的所有行。