2011-06-13 21 views
0

目前,我有以下MySQL查詢,其中沒有任何錯誤,執行罰款:WHERE子句不符合我的意圖嗎?

SELECT topic_id, 
     topic_title, 
     topic_author, 
     topic_type 
FROM forum_topics 
WHERE (((forum_id = '2') 
      OR (forum_id != '4' 
       AND topic_type = 2)) 
     AND deleted = 0) 
ORDER BY topic_id DESC 

但是它沒有做什麼,我想讓它過,我想它返回主題的所有結果,其中forum_id爲2,刪除等於0以及返回forum_id不等於4且topic_type爲2並且刪除等於0(如果它們存在)的主題的結果。

但目前它只是做第一個剛剛返回的主題結果,其中forum_id是2,刪除等於0而不是其他(即使它們存在!:/)。

我相信我在做錯事...

所有的幫助是非常感謝。

+1

什麼是表的結構?是topic_type數字?爲什麼在使用數字時id是一個字符串? (它不會真的影響任何東西,但它是數字類型是有意義的)。 – 2011-06-13 19:40:09

回答

1

我覺得你的where子句會是這樣的:

WHERE ((forum_id = '2' AND deleted = 0) 
     OR 
     (forum_id != '4' AND topic_type = '2' AND deleted = 0) 
     ) 
+0

+1爲了清楚起見,並在SQL中表達OP的條件與文本完全相同。 – 2011-06-13 20:40:58

1

,使其更簡單的自己,把你的查詢相符的部分(刪除= 0)第一:

SELECT 
    topic_id,   
    topic_title,   
    topic_author,   
    topic_type 
FROM forum_topics 
WHERE deleted = 0 AND 
     ((forum_id = '2')    
      OR (forum_id != '4'     
       AND topic_type = 2))   
ORDER BY topic_id DESC 

除此之外,您的查詢似乎正確的,我會嘗試,如果你不能使用IN語句讓它工作。

0

試試這個:

SELECT topic_id, topic_title, topic_author, topic_type 
FROM forum_topics 
WHERE forum_id = 2 
OR (forum_id != 4 AND topic_type = 2) 
AND deleted = 0 
ORDER BY topic_id DESC