带有AND和OR的PHP MySQL语句

时间:2013-08-23 10:24:09

标签: php mysql sql

我有一个PHP MySQL语句,基本上我想要的是检查表元素匹配,然后检查第二个表元素匹配或第三个表元素匹配,有点像这样

if ref=ref (AND page=page OR allpages=1)

表示搜索包含ref=ref的所有网页,然后在该记录集中检查是page=page还是全部pages=1

所以MySQL声明是这样的:

 $sql=mysql_query("SELECT * FROM content WHERE ref='$ref' AND page_ref='$page_ref' OR allPages='1');

但它正在从数据库中获取与ref不匹配但allpages=1

的记录

是否有某种方法可以将此问题包括在内或重组声明?

6 个答案:

答案 0 :(得分:1)

只需添加这样的括号:

SELECT * FROM content 
 WHERE ref='ref' 
   AND (page_ref='page_ref' OR allPages='1')
-------^------------------------------------^----Add here

所以你的整个查询应该是:

$sql=mysql_query("SELECT * FROM content WHERE ref='$ref' AND (page_ref='$page_ref' OR allPages='1')");

答案 1 :(得分:1)

您的if ref=ref (AND page=page OR allpages=1)几乎是正确的,但您希望括号中的AND

if ref=ref AND (page=page OR allpages=1)

实现:

$sql=mysql_query("SELECT * FROM content WHERE ref='$ref' AND (page_ref='$page_ref' OR allPages='1')");

注意:您也错过了查询中的结束"(虽然我怀疑在创建问题时这是一个复制错误)

进一步改进(连接和反引号):

$sql=mysql_query("SELECT * FROM `content` WHERE `ref`='".$ref."' AND (`page_ref`='".$page_ref."' OR `allPages`=1)");

答案 2 :(得分:1)

用户Operator Precedance

  
    

运算符的优先级指定它如何“紧密”将两个表达式绑定在一起。例如,在表达式1 + 5 * 3中,答案是16而不是18,因为乘法(“*”)运算符的优先级高于加法(“+”)运算符。如有必要,括号可用于强制优先。例如:(1 + 5)* 3评估为18。

  
"SELECT * FROM content WHERE ref='".$ref."' AND (page_ref='".$page_ref."' OR allPages=1")

答案 3 :(得分:1)

我认为

SELECT * FROM content WHERE ref='$ref' AND (page_ref='$page_ref' OR allPages='1')

这是一个优先事项。您可以在相应的manual page中阅读有关运算符优先级的内容。

另请注意,mysql_*函数已被正式弃用,因此请改用mysqli_PDO

答案 4 :(得分:1)

您可以在mySQL语句中添加括号,就像将它们添加到PHP语句一样。只需确保您的表达式与您所需的逻辑相同即可。

$sql=mysql_query("SELECT * FROM content WHERE ref='$ref' AND (page_ref='$page_ref' OR allPages='1')");

答案 5 :(得分:1)

您应该围绕OR比较设置大括号:

 WHERE ref='$ref' AND ( page_ref='$page_ref' OR allPages='1' )