2011-06-25 2 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, но вы можете переопределить это, используя скобки.

2

Это, вероятно, вашего OR заявление

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

Вы должны заключить это в скобках для любого объем OR является

Смежные вопросы