Проблема с запросом MySQL

0

У меня есть таблица, в которой я пытаюсь отфильтровать определенный идентификатор (rid), который попадает между определенными датами.... но! то, что я получаю, это запрос, который не учитывает условие ID (rid) как условие.

Это запрос:

  SELECT * FROM booking 
  WHERE '2010-10-01' BETWEEN datefrom AND dateto - INTERVAL 1 DAY 
    OR '2010-10-09' BETWEEN datefrom + INTERVAL 1 DAY AND dateto 
    OR datefrom BETWEEN '2010-10-01' AND '2010-10-09' - INTERVAL 1 DAY 
   AND **rid = '5' 
   AND active = '1'** 
   LIMIT 0 , 30

Это структура таблицы для бронирования:

bid     gid      rid      datefrom        dateto          active
=================================================================
1       1        1        2010-09-16      2010-09-20      1
8       9        2        2010-09-06      2010-09-16      1
7       8        2        2010-09-23      2010-09-28      1
Теги:

3 ответа

3
Лучший ответ

Попробуйте использовать скобки для условий даты:

  SELECT * FROM booking 
  WHERE rid = '5' 
   AND active = '1'
   AND ('2010-10-01' BETWEEN datefrom AND dateto - INTERVAL 1 DAY 
    OR '2010-10-09' BETWEEN datefrom + INTERVAL 1 DAY AND dateto 
    OR datefrom BETWEEN '2010-10-01' AND '2010-10-09' - INTERVAL 1 DAY) 
   LIMIT 0 , 30
  • 0
    Спасибо за это, теперь он работает нормально.
  • 0
    @majimoto: Не забудьте принять правильный ответ (используя галочку)
0

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

SELECT * FROM booking WHERE
('2010-10-01' BETWEEN datefrom AND dateto - INTERVAL 1 DAY) 
OR ('2010-10-09' BETWEEN datefrom + INTERVAL 1 DAY AND dateto) 
OR (datefrom BETWEEN '2010-10-01' AND '2010-10-09' - INTERVAL 1 DAY) 
AND rid = '5' AND active = '1' 
LIMIT 0 , 30
  • 0
    Имеет ту же проблему, что и мой запрос ... но решение Михаила Паханцова работает нормально
0

Я думаю, вам понадобится использовать некоторые круглые скобки вокруг всех ваших условий OR в качестве группы, чтобы он знал, как применять условия AND в конце.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню