У меня есть таблица, в которой я пытаюсь отфильтровать определенный идентификатор (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
Попробуйте использовать скобки для условий даты:
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
попробуйте этот
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
Я думаю, вам понадобится использовать некоторые круглые скобки вокруг всех ваших условий OR в качестве группы, чтобы он знал, как применять условия AND в конце.