SQL查询中的“AND”和“OR”

时间:2010-03-25 17:06:45

标签: mysql

我希望有人可以帮我解释一下我是如何写得正确的。

$details_quey = mysql_query("SELECT * FROM `accounts` WHERE ONLINE = 'true' OR FORCE_AWAY = 'true' OR AWAY = 'true' AND FORCE_OFFLINE = 'false' AND TOKEN = '$con_token' ", $CON )

任何帮助都非常感激。

5 个答案:

答案 0 :(得分:1)

SELECT * FROM `accounts` 
WHERE 
(ONLINE = 'true' OR FORCE_AWAY = 'true' OR AWAY = 'true')
AND FORCE_OFFLINE = 'false' AND TOKEN = '$con_token' 

猜一点,但我认为这就是你想要的。

假设你想要任何一个OR和所有AND匹配的东西

答案 1 :(得分:1)

AND优先于SQL查询中的OR。因此,您的查询现在正如此评估:

SELECT * FROM `accounts` WHERE
    ONLINE = 'true' OR
    FORCE_AWAY = 'true' OR
    ( AWAY = 'true' AND 
    FORCE_OFFLINE = 'false' AND
    TOKEN = '$con_token' );

只需使用( )对应该一起评估的条件进行分组:

SELECT * FROM `accounts` WHERE
    (ONLINE = 'true' OR
    FORCE_AWAY = 'true') OR
    (AWAY = 'true' AND 
    FORCE_OFFLINE = 'false') AND
    TOKEN = '$con_token' );

答案 2 :(得分:0)

"SELECT * FROM `accounts` WHERE (ONLINE = 'true' OR FORCE_AWAY = 'true' OR AWAY = 'true') AND FORCE_OFFLINE = 'false' AND TOKEN = '$con_token' ", 

只需使用一些大括号来保持和/或逻辑分离。检查此人是否在线或离开或离开并且强制离线是否为false且令牌值= con token。

答案 3 :(得分:0)

不确定您要找的是什么,但括号肯定会有助于OR

$details_quey = mysql_query("SELECT * FROM `accounts` WHERE (ONLINE = 'true' OR FORCE_AWAY = 'true' OR AWAY = 'true') AND FORCE_OFFLINE = 'false' AND TOKEN = '$con_token' ", $CON )

答案 4 :(得分:0)

很难说出你想要完成的是什么,但是假设你想要:

(online = true OR force_away = true OR away = true) 和 force_offline = false AND token = $ con_token

您的OR需要在括号中组合在一起,否则AND将没有多大意义。

SELECT * FROM `accounts` WHERE (ONLINE = 'true' OR FORCE_AWAY = 'true' OR AWAY = 'true' AND FORCE_OFFLINE = 'false') AND TOKEN = '$con_token