所以这是我的查询,如果批准设置为0或1无关紧要,无论如何都会给我所有行
SELECT *
FROM `tutorials`
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php'
AND approved=1
我想这是因为OR,但我可能错了,如果有人可以帮我解决这个问题:)
答案 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