0

<> (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>&nbsp" . htmlspecialchars($row['habbo_name']) . "<br>";
                }
?>

结果:

SDP: -Jose,
SDP: -Wyatt-
SDP: CPT.Black
SDP: Dr.Jacobson
SDP: Malwarebyte 
SDP: NShadow
SDP: tharuka$ (Dudestetson) 
4

3 回答 3

3

AND具有比更高的优先级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 的IN()运算符来简化条件habbo_name

WHERE status = 'active'
  AND (rating LIKE '%(SDP%' OR rating LIKE '%/SDP)%')
  AND habbo_name NOT IN ('-Jose,', 'tharuka$')
于 2013-07-23T18:56:26.783 回答
1

将此 AND 替换为 OR

(`habbo_name` <> '-Jose,' AND `habbo_name` <> 'tharuka$')

(`habbo_name` <> '-Jose,' OR `habbo_name` <> 'tharuka$')

或者你可以使用以下

`habbo_name` NOT IN ('-Jose,','tharuka$')
于 2013-07-23T18:52:34.103 回答
0

您正在搜索以下结果:

1) 具有等于“活跃”的状态和类似“%(SDP%”的评级

或者

2) 有一个像 '%/SDP)%' 这样的评级并且 habbo_name 不等于 -Jose / tharuka$

如果 -Jose / tharuka$ 的评分为“活跃”并且他们的评分类似于“%(SDP%”,它们仍将被返回

于 2013-07-23T18:53:43.793 回答