powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помочь с запросом
5 сообщений из 5, страница 1 из 1
Прошу помочь с запросом
    #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
Прошу помочь с запросом
    #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
Прошу помочь с запросом
    #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
Прошу помочь с запросом
    #39379521
nov17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
retvizan,

Извиняюсь вообще то все правильно работает. Спасибо!
...
Рейтинг: 0 / 0
Прошу помочь с запросом
    #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
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помочь с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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