MySQL<>不工作 - 返回那些结果

时间:2013-07-23 18:48:09

标签: mysql operators

我遇到了<>的问题(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) 

3 个答案:

答案 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%',则仍会返回