2011-06-25 57 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的范围