我遇到了<>的问题(NOT)运营商。
我正在尝试检索habbo_name不等于给定的两行的行,但它仍然返回这些行。有没有人对我如何解决这个问题有任何建议?
代码:
<?php
$query = "SELECT `user_id`, `rank`, `habbo_name`, `rating`, `branch` FROM `personnel` WHERE status='active' AND `rating` LIKE '%(SDP%' OR `rating` LIKE '%/SDP)%' AND (`habbo_name` <> '-Jose,' AND `habbo_name` <> 'tharuka$') AND status='active' ORDER BY `habbo_name`";
$result = $con->prepare($query);
$result->execute();
while($row = $result->fetch()) {
echo "<b>SDP:</b> " . htmlspecialchars($row['habbo_name']) . "<br>";
}
?>
结果:
SDP: -Jose,
SDP: -Wyatt-
SDP: CPT.Black
SDP: Dr.Jacobson
SDP: Malwarebyte
SDP: NShadow
SDP: tharuka$ (Dudestetson)
答案 0 :(得分:3)
AND
的{{3}}高于OR
,因此在混合两个运算符时,通常需要包括括号来强制执行一个所需的逻辑。就目前情况而言,您的过滤器表达式评估为:
WHERE (
status = 'active'
AND rating LIKE '%(SDP%'
) OR (
rating LIKE '%/SDP)%'
AND habbo_name <> '-Jose,'
AND habbo_name <> 'tharuka$'
AND status = 'active'
)
我怀疑你想要的是:
WHERE status = 'active'
AND (rating LIKE '%(SDP%' OR rating LIKE '%/SDP)%')
AND habbo_name <> '-Jose,' AND habbo_name <> 'tharuka$'
在这种情况下,可以使用MySQL的precedence运算符来简化habbo_name
上的条件:
WHERE status = 'active'
AND (rating LIKE '%(SDP%' OR rating LIKE '%/SDP)%')
AND habbo_name NOT IN ('-Jose,', 'tharuka$')
答案 1 :(得分:1)
将此AND替换为OR
(`habbo_name` <> '-Jose,' AND `habbo_name` <> 'tharuka$')
到
(`habbo_name` <> '-Jose,' OR `habbo_name` <> 'tharuka$')
或者您可以使用以下
`habbo_name` NOT IN ('-Jose,','tharuka$')
答案 2 :(得分:0)
您正在搜索以下结果:
1)状态等于'有效'且等级为'%(SDP%'
或强>
2)评分为'%/ SDP)%',其中habbo_name不等于-Jose / tharuka $
如果-Jose / tharuka $的评级为“有效”且评级为'%(SDP%',则仍会返回