2014-05-01 78 views
0

我有一個category.php頁面,其中顯示了給定類別($ tagname)中啓用= 1的所有文章。當一篇文章只有一個標籤(和兩個空標籤)時,一切都很好。文章將顯示在這個category.php頁面(當啓用時設置爲1)。但是,如果至少填充了兩個標籤,那麼文章將顯示在category.php頁面上,其中tag2 = $ tagname或tag3 = $ tagname - 不管啓用字段包含哪些內容(1表示啓用,2表示禁用)!底線 - 爲什麼它顯示即使啓用設置爲2該文章?MySQL WHERE無法正常工作

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

感謝您的幫助!現在它工作正常! :) (tag1 ='$ tagname'或者tag2 ='$ tagname'或者tag3 ='$ tagname') – amadeo

回答

1

試試這個:

SELECT * 
FROM articles 
WHERE enabled=1 
    AND (tag1='$tagname' 
     OR tag2='$tagname' 
     OR tag3='$tagname') 
1

使用此查詢。

SELECT * 
FROM articles 
WHERE enabled=1 
    AND (tag1='$tagname' 
     OR tag2='$tagname' 
     OR tag3='$tagname') 
1

嘗試所以現在來分隔條件

SELECT * 
FROM articles 
WHERE enabled=1 
    AND (tag1='$tagname' 
     OR tag2='$tagname' 
     OR tag3='$tagname') 

這將是檢查的結果,其中啓用= 1和3

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') 

參考Operator Precedence