2015-05-06 5 views
3

Я следующие запросы MySQL:Союз все, сочетающий в себе запрос

SELECT * 
FROM bookings 
WHERE record_id = 7 AND status = 'available' AND startdate >= '2015-05-02' AND startdate <= '2015-05-09' 
UNION ALL 
SELECT * 
FROM bookings 
WHERE record_id = 7 AND status = 'available' AND startdate >= '2015-05-11' AND startdate <= '2015-05-12' 

Можно ли объединить эти два запроса, вместо использования UNION ALL?

ответ

2

You можно использовать OR оператор вместо ниже

SELECT * 
FROM bookings 
WHERE record_id = 7 
AND status = 'available' 
AND ((startdate >= '2015-05-11' AND startdate <= '2015-05-12') or (startdate >= '2015-05-02' AND startdate <= '2015-05-09')) 
1

Оставьте эту часть:

SELECT * FROM bookings WHERE record_id = 7 AND status = 'available' 

Добавить это:

AND ((startdate >= '2015-05-02' AND startdate <= '2015-05-09') OR (startdate >= '2015-05-11' AND startdate <= '2015-05-12')) 

ИЛИ условие возвращает истину, если вы получите истинное для первого и условия Или второго и условия

Также для тех и тех условий, которые вы используете, вы можете взглянуть на инструкцию sql BETWEEN: http://www.w3schools.com/sql/sql_between.asp

Вы также могли бы сделать это после первой части:

AND startDate >= '2015-05-02' AND startDate <= '2015-05-12' AND NOT startDate = '2015-05-10' 

Как вы используете жестко закодированные даты в любом случае, и только один в этом диапазоне вам не нужно это 10 мая

2

Эта schould работа:

SELECT * 
FROM bookings 
WHERE record_id = 7 AND status = 'available' AND 
    ((startdate >= '2015-05-02' AND startdate <= '2015-05-09') or (startdate >= '2015-05-11' AND startdate <= '2015-05-12')) 
2

Вы можете использовать только оператор OR, чтобы получить оба диапазона дат:

SELECT * 
FROM bookings 
WHERE record_id = 7 AND 
     status = 'available' AND 
     ((startdate >= '2015-05-02' AND startdate <= '2015-05-09') OR 
     (startdate >= '2015-05-11' AND startdate <= '2015-05-12')) 
Смежные вопросы