-1

我有一个 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

是否有某种方法可以将其括起来或重组声明?

4

6 回答 6

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')");
于 2013-08-23T10:26:30.903 回答
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)");
于 2013-08-23T10:26:32.980 回答
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")
于 2013-08-23T10:26:36.603 回答
1

我认为

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

这是一个优先事项。您可以在相应的手册页中阅读有关运算符优先级的信息。

另外,请记住,mysql_*函数已被正式弃用,因此请使用mysqli_orPDO代替。

于 2013-08-23T10:26:37.750 回答
1

您可以像将括号添加到 PHP 语句一样,将括号添加到 mySQL 语句。只需确保您的表达式以与所需逻辑相同的方式括起来。

$sql=mysql_query("SELECT * FROM content WHERE ref='$ref' AND (page_ref='$page_ref' OR allPages='1')");
于 2013-08-23T10:26:38.543 回答
1

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

 WHERE ref='$ref' AND ( page_ref='$page_ref' OR allPages='1' )
于 2013-08-23T10:26:55.953 回答