МЕЖДУ и ИЛИ Выберите - PullRequest
3 голосов
/ 15 марта 2011

Как я могу сделать фильтрацию по диапазону дат

Select * from  XXX where date between DATE1 AND DATE2 OR Between DATE3 AND DATE4

(Скопировано из обновления опубликовано как ответ)

Вот мое состояние

WHERE  ( items_count != '0' )
       AND ( main_table.is_active = '1' )
       AND ( main_table.store_id IN ( '0', '1' ) )
       AND ( main_table.updated_at BETWEEN
             '2011-03-04 16:52:19' AND '2011-03-05 16:52:19'
           )
        OR ( main_table.updated_at BETWEEN
             '2011-03-13 16:52:19' AND '2011-03-14 16:52:19'
           )
LIMIT  0, 30  

первое условие никогда не используется

Ответы [ 4 ]

3 голосов
/ 15 марта 2011
Select * from  XXX 
  where (date between DATE1 AND DATE2) 
        OR 
        (date between DATE3 AND DATE4)

EDIT:

Попробуйте это:

WHERE items_count != '0' AND 
      main_table.is_active = '1' AND 
      main_table.store_id IN ('0', '1') AND 
      (  main_table.updated_at BETWEEN '2011-03-04 16:52:19' AND '2011-03-05 16:52:19' 
         OR 
         main_table.updated_at BETWEEN '2011-03-13 16:52:19' AND '2011-03-14 16:52:19'
      )
1 голос
/ 15 марта 2011

Немного OCD всегда помогает с SQL ...

Вам не нужны все скобки, которые есть, но ИЛИ работает не так, как вы ожидаете.

.... 
   WHERE 
    items_count != '0'        
    AND 
    main_table.is_active = '1'        
    AND 
    main_table.store_id IN ('0', '1')
    AND (
      main_table.updated_at
      BETWEEN '2011-03-04 16:52:19'
      AND '2011-03-05 16:52:19'
      OR 
      main_table.updated_at
      BETWEEN '2011-03-13 16:52:19'
      AND '2011-03-14 16:52:19'
    )
    LIMIT 0 , 30
1 голос
/ 15 марта 2011

Как это:

 select * from XXX 
 where (date between DATE1 AND DATE2) 
    or (date between DATE3 AND DATE4)
1 голос
/ 15 марта 2011

Относитесь к ним как к независимым условиям:

select * from xxx where (date between date1 and date2) or (date between date3 and date4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...