2011-06-25 102 views
0

我有以下查詢來從wpr_subscribers提取行,條件是查詢中的條件。如何解決這個sql查詢?

SELECT subscribers.* FROM wpr_subscribers subscribers, wpr_followup_subscriptions subscriptions WHERE 
      subscribers.id=subscriptions.sid AND 
      subscribers.active=1 AND 
      subscribers.confirmed=1 AND 
      subscriptions.type='autoresponder' AND 
      subscriptions.eid=$autoresponder_id AND 
      subscriptions.sequence = -2 OR 
      CEIL((subscriptions.last_date-subscriptions.doc)/86400) >= $message_index 

該查詢返回每行的兩個。我該如何解決這個問題?

+2

請張貼的架構表附上這一點。謝謝! –

+0

看不到任何錯誤的查詢。檢查重複的行不在數據庫中,併發布一些PHP代碼。 – bcoughlan

+0

你確定你不需要括號? – mpen

回答

3
SELECT DISTINCT subscribers.* FROM wpr_subscribers subscribers, wpr_followup_subscriptions 
subscriptions WHERE 
     subscribers.id=subscriptions.sid AND 
     subscribers.active=1 AND 
     subscribers.confirmed=1 AND 
     subscriptions.type='autoresponder' AND 
     subscriptions.eid=$autoresponder_id AND 
     subscriptions.sequence = -2 OR 
     CEIL((subscriptions.last_date-subscriptions.doc)/86400) >= $message_index 

DISTINCT關鍵字將幫助您僅返回表中的唯一(不同)行。您確定查詢中的AND和OR的邏輯,您現在將收到的唯一數據確實是正確的。僅用於信息,AND運算符優先於OR,但您可以使用括號覆蓋該運算符。

2

這可能是你的OR聲明

 subscriptions.sequence = -2 OR 
     CEIL((subscriptions.last_date-subscriptions.doc)/86400) >= $message_index 

你應該在括號中爲無論OR的範圍