2013-09-26 4 views
-1

Я понятия не имею, что я делаю неправильно ... это мой код:SQL «не» (<>) не работает

SELECT * 
FROM messages 
WHERE userId = "6" 
OR toUserId = "6" 
OR toAll = "1" 
AND id <> "4" 
ORDER BY time DESC 
LIMIT 1 

Проблема заключается в том, что «не» (<>) не работает, он все равно возвращает результат, когда id равен 4. В чем проблема?

EDIT: Теперь я застрял со следующей проблемой:

SELECT * 
FROM messages 
WHERE (
    userId = "6" 
    OR toUserId = "6" 
    OR toAll = "1" 
) 
AND id <> IN ('4','2') 
ORDER BY time DESC 
LIMIT 1 

И снова проблема в том, что вывод является ложным, то есть это не работает.

ответ

9

Вы должны использовать скобки для обозначения приоритета операторов:

WHERE (
     userId = "6" 
    OR toUserId = "6" 
    OR toAll = "1" 
) 
AND id <> "4" 
2

Я думаю, ваше состояние запроса должно быть так:

WHERE 
(userId = "6" OR toUserId = "6" OR toAll = "1") 
AND (id <> "4") 

Ваш запрос будет оценен на:

WHERE 
    (userId = "6" OR toUserId = "6") OR (toAll = "1" AND id <> "4") 

Это не то, что вы хотите.

Смежные вопросы