Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помочь с запросом / 5 сообщений из 5, страница 1 из 1
04.01.2017, 12:42
    #39379470
nov17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с запросом
Здравствуйте, заранее извиняюсь если похожая тема уже была. Изучаю MySql, для практики пытаюсь сделать систему поиска и бронирования отелей.

Есть таблица rooms и поля:

id | id_hotel | number

Есть таблица busy_dates (Даты занятости комнат)

id | id_room | date_from (DATE) | date_to (DATE)

Появились трудности в составлении запроса для поиска свободных комнат. Например пользователь вводит даты 04.01.2017 - 10.01.2017, запрос:
Код: sql
1.
SELECT room.id FROM room LEFT JOIN busy_dates ON id_room = room.id AND date_to < "04.01.2017"



Проблема в том, что если даже на эту дату комната занята, из-за LEFT JOIN эта комната все равно выходит. Вторая проблема в дублировании. Просьба подсказать решение. Спасибо!
...
Рейтинг: 0 / 0
04.01.2017, 13:21
    #39379482
retvizan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с запросом
nov17,

Код: sql
1.
SELECT room.id FROM room WHERE id NOT IN (SELECT id_room FROM busy_dates WHERE date_from... AND date_to...);
...
Рейтинг: 0 / 0
04.01.2017, 16:04
    #39379518
nov17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с запросом
retvizannov17,

Код: sql
1.
SELECT room.id FROM room WHERE id NOT IN (SELECT id_room FROM busy_dates WHERE date_from... AND date_to...);



К сожалению в таком случае, работает не так как нужно. Например в таблице busy_dates есть записи

Код: plaintext
1.
2.
3.
4.
5.
 id              id_room      date_from          date_to        
 -----------------------------------------------------------
| 1          | 10          | 2017-01-03 |    2017-01-07   |       
| 2          | 10          | 2017-01-18 |    2017-01-21   |
| 3          | 10          | 2017-01-23 |    2017-01-27   |
 -----------------------------------------------------------

При запросе

Код: sql
1.
SELECT room.id FROM room WHERE id NOT IN (SELECT id_room FROM busy_dates WHERE date_from <= "2017-01-04" AND date_to >= "2017-01-06");



Строки с id 2 и 3 не попадают в список
...
Рейтинг: 0 / 0
04.01.2017, 16:18
    #39379521
nov17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с запросом
retvizan,

Извиняюсь вообще то все правильно работает. Спасибо!
...
Рейтинг: 0 / 0
05.01.2017, 00:46
    #39379611
nov17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с запросом
Вот готовое решение, вдруг кому то пригодится

Код: sql
1.
SELECT room.id FROM room WHERE id NOT IN (SELECT id_room FROM busy_dates WHERE (busy_from <= :busy_from AND busy_to >= :busy_to) OR (busy_from >= :busy_from AND busy_from <= :busy_to AND busy_to >= :busy_to) OR (busy_from >= :busy_from AND busy_to <= :busy_to));
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помочь с запросом / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]