我有一个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
是否有某种方法可以将此问题包括在内或重组声明?
答案 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' )