带有多个AND语句的MySQL查询似乎忽略了一个

And*_*las 1 mysql

我正在尝试在MySQL数据库上运行查询,但我发现它似乎忽略了'status'项.

SELECT * FROM  `posts`  
WHERE
      `tags` LIKE '%gda%' 
   OR `tags` LIKE '%contests%' 
   OR `tags` LIKE '%merch%' 
  AND `newsID` != '2134' 
  AND `status` > '1' 
ORDER BY  `postDate` DESC  LIMIT 5
Run Code Online (Sandbox Code Playgroud)

在那个例子中,即使'status'设置为0,它仍然会拉动项目.我做错了什么?

eum*_*iro 7

问题在于OR/ AND条件的优先级.AND具有更高的优先级OR,这就是为什么它首先评估由AND(tags-merch,newsID-2134和status-1)连接的所有条件,然后评估两个tags-gda和tags-contests.

尝试添加括号:

SELECT *  
  FROM  `posts`  
 WHERE (`tags` LIKE  '%gda%' 
    OR  `tags` LIKE  '%contests%' 
    OR  `tags` LIKE  '%merch%')
   AND  `newsID` !=  '2134' 
   AND `status` > '1' 
ORDER BY  `postDate` DESC
LIMIT 5
Run Code Online (Sandbox Code Playgroud)