如何解决这个SQL查询?

时间:2011-06-25 02:18:08

标签: php mysql sql

如果查询条件允许,我有以下查询从wpr_subscribers中获取行。

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 :(得分: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,但是您可以使用括号覆盖它。

答案 1 :(得分:2)

可能是您的OR声明

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

无论OR的范围是什么

,都应将其括在括号中