我有一个category.php页面,其中显示了给定类别($ tagname)中enabled = 1的所有文章。当一篇文章只有一个标签(和两个空标签)时,一切都很好。该文章将显示在此category.php页面上(启用时设置为1)。但是,如果填充了至少两个标签,那么该文章将显示在category.php页面上,其中tag2 = $ tagname或者如果tag3 = $ tagname - 无论启用的字段包含什么(1表示启用,2表示禁用)!
底线 - 即使该文章的启用设置为2,为什么会显示?
SELECT *
FROM articles
WHERE enabled=1
AND tag1='$tagname'
OR tag2='$tagname'
OR tag3='$tagname'
enabled, int
tag1, varchar(30)
tag2, varchar(30)
tag3, varchar(30)
谢谢!
答案 0 :(得分:2)
AND
优先于OR
,因此在您的查询中
首先评估enabled=1 and tag1='$tagname'
,然后评估
将其结果与下一个OR
表达式进行比较,依此类推......
除非您将AND
条件与OR
条件正确分开,否则输出将会出乎意料。
更改您的查询,如下所示:
SELECT * FROM articles
WHERE enabled=1
AND (tag1='$tagname' OR tag2='$tagname' OR tag3='$tagname')
答案 1 :(得分:1)
试试这个:
SELECT *
FROM articles
WHERE enabled=1
AND (tag1='$tagname'
OR tag2='$tagname'
OR tag3='$tagname')
答案 2 :(得分:1)
使用此查询。
SELECT *
FROM articles
WHERE enabled=1
AND (tag1='$tagname'
OR tag2='$tagname'
OR tag3='$tagname')
答案 3 :(得分:1)
尝试分离你的条件
SELECT *
FROM articles
WHERE enabled=1
AND (tag1='$tagname'
OR tag2='$tagname'
OR tag3='$tagname')
所以现在它将检查结果,其中enabled = 1,任何标记结果都来自3