mysqli查询,LIKE和AND在同一个查询中不会像它应该的那样工作

时间:2009-12-01 09:16:29

标签: mysqli

所以这是我的查询,如果批准设置为0或1无关紧要,无论如何都会给我所有行

SELECT * 
FROM `tutorials` 
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php' 
AND approved=1

我想这是因为OR,但我可能错了,如果有人可以帮我解决这个问题:)

3 个答案:

答案 0 :(得分:6)

试用括号

SELECT * 
FROM `tutorials` 
WHERE   (       tags LIKE '% php %' 
            OR  tags LIKE 'php %' 
            OR  tags LIKE '% php' 
            OR  tags = 'php' 
        )
AND approved=1

答案 1 :(得分:2)

我认为你错过了一些冒号:

SELECT * 
FROM `tutorials` 
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php')
AND approved=1

您应该包含冒号的原因是因为OR和AND运算符处于相同的优先级。省略冒号时,您的查询将被解析为:

SELECT * 
FROM `tutorials` 
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php' 
AND approved=1))))

特别是在查询中使用OR和AND运算符的长列表时,建议使用冒号来明确您的意图。有关MySQL中运算符优先级的完整列表(通常与其他SQL方言相同),请参阅the MySQL manual

答案 2 :(得分:1)

我没有得到你想要的东西。但这可能是你正在寻找的那个

  

SELECT * FROM tutorials WHERE   标签LIKE'%php%'或标签LIKE'php%'或标签LIKE'%php'或标签=   'php' AND approved = 1