powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Снова прошу помощи, нужна помощь в составлении запроса.
7 сообщений из 7, страница 1 из 1
Снова прошу помощи, нужна помощь в составлении запроса.
    #40034032
alex228
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, снова прошу о помощи. Недавно писал похожую тему всем спасибо огромное за ответы. Думал, что смогу оптимизировать тот запрос под свою БД. Но не хватает знаний как расставить условия. Есть две таблицы:
Application:
-id; -check_in - дата заезда; -check_out - дата выезда; -status; -room_id
Room:
-id; -type; -number;

Поля для объеденения Application.room_id = Room.id.

Нужно вывести все Room из таблицы room (where room.status='AVAILABLE'), кроме тех которые есть в application с (status = 'CONFIRMED') и (('2021.01.07'<check_in<'2021.01.09') или ('2021.01.07'<check_out<'2021.01.09'));
т.е. нужно вывести все комнаты доступные комнаты, которые не забронированы в заявках на промежуток между числами '2021.01.07' и '2021.01.09'
Вот пример создания БД и ее заполнения.

CREATE SCHEMA `test` ;

CREATE TABLE IF NOT EXISTS `test`.`room`
(
`id` BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`type` ENUM ('THREE_STARS', 'FOUR_STARS', 'FIVE_STARS') NOT NULL,
`status` ENUM ('AVAILABLE', 'NOT_AVAILABLE','DELETED') NOT NULL,
`number` INT NOT NULL
);

insert into room (type,status,number) values ('THREE_STARS','AVAILABLE',11);
insert into room (type,status,number) values ('THREE_STARS','AVAILABLE',12);
insert into room (type,status,number) values ('THREE_STARS','NOT_AVAILABLE',13);
insert into room (type,status,number) values ('FOUR_STARS','AVAILABLE',21);
insert into room (type,status,number) values ('FOUR_STARS','DELETED',22);
insert into room (type,status,number) values ('FOUR_STARS','AVAILABLE',23);
CREATE TABLE IF NOT EXISTS `test`.`application`
(
id BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,
check_in DATE NOT NULL,
check_out DATE NOT NULL,
status enum ('IN_PROGRESS', 'CONFIRMED','DELETED') NOT NULL,
room_id BIGINT default null
);
insert into application (check_in,check_out,status,room_id) values ('2021-01-01','2021-01-03','IN_PROGRESS',0);
insert into application (check_in,check_out,status,room_id) values ('2021-01-06','2021-01-08','CONFIRMED',11);
insert into application (check_in,check_out,status,room_id) values ('2021-01-01','2021-01-03','CONFIRMED',12);
insert into application (check_in,check_out,status,room_id) values ('2021-01-06','2021-01-10','CONFIRMED',23);

Запрос должен вывести комнаты с номерами 12 и 21.
Буду рад любым советам, ответам, ЗДРАВОЙ КРИТИКЕ. Заранее спасибо за помощь.
P.S. Отвечу сразу тем кто подумал "лентяй не хочет разобраться". В sql совсем новичок пишу учебный проект на java, нужно работать с БД, но знаний для написания таких запросов нет и нескольких свободных дней для изучения этой темы просто нет (горит сдача проекта). Буду также благодарен за ссылки на годные ресурсы или книги, что бы потом разобраться с sql.
...
Рейтинг: 0 / 0
Снова прошу помощи, нужна помощь в составлении запроса.
    #40034038
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex228
Поля для объеденения Application.room_id = Room.id.
Не верю.
...
Рейтинг: 0 / 0
Снова прошу помощи, нужна помощь в составлении запроса.
    #40034043
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex228,
Так а что именно не получается? Вы же условия сформулировали, осталось выборку написать.
Код: sql
1.
2.
3.
4.
5.
6.
SELECT *
  FROM room
JOIN -- тут джойним application, чтобы исключить ненужные комнаты
  WHERE 
    room.status='AVAILABLE' AND
   --  (status = 'CONFIRMED' AND '2021.01.07'<check_in<'2021.01.09') тут надо заменить '<' на BETWEEN


P.S. Я бы 'NOT_AVAILABLE' заменил на 'UNAVAILABLE', стилистически приятнее и нет надобности в подчеркивании.
...
Рейтинг: 0 / 0
Снова прошу помощи, нужна помощь в составлении запроса.
    #40034046
alex228
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Вы совершенно правильно пишете, исправил:
insert into application (check_in,check_out,status,room_id) values ('2021-01-01','2021-01-03','IN_PROGRESS',0);
insert into application (check_in,check_out,status,room_id) values ('2021-01-06','2021-01-08','CONFIRMED',1);
insert into application (check_in,check_out,status,room_id) values ('2021-01-01','2021-01-03','CONFIRMED',2);
insert into application (check_in,check_out,status,room_id) values ('2021-01-06','2021-01-10','CONFIRMED',6);
Спасибо за замечание.
...
Рейтинг: 0 / 0
Снова прошу помощи, нужна помощь в составлении запроса.
    #40034047
alex228
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,
Спасибо за ответ, проблема в том, что не знаю как синтаксис использовать, по поводу 'UNAVAILABLE' хорошее замечание. Буду разбираться уже проще будет =)
...
Рейтинг: 0 / 0
Снова прошу помощи, нужна помощь в составлении запроса.
    #40034051
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex228
Gluck99,
не знаю как синтаксис использовать
Это самый простой вопрос. Берёте справочные материалы по MySQL, благо их вагон и маленькая тележка, и внимательно изучаете.
Я бы рекомендовал вам потратить день на изучение JOIN'ов. Потому что фактически 95% запросов (хоть немного сложных) - это JOIN'ы. Всякие функции, синтаксис - шелуха. Если вы не осознаёте, как работает соединение таблиц, вы не можете даже начать решать задачу. Понять саму суть можно за час. Выработать навык через эксперименты и упражнения - дня хватит. После этого у вас словно прояснится в голове. Но для этого надо собраться с силами и сделать волевое усилие. Сейчас праздники, попробуйте потратить на JOIN'ы день - почитайте теорию, посоставляйте запросы, поэкспериментируйте с разными выборками. Бесконечно спрашивать на форуме - пустое дело.
...
Рейтинг: 0 / 0
Снова прошу помощи, нужна помощь в составлении запроса.
    #40034055
alex228
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,
я с вами полностью согласен, спасибо за совет просто сейчас нет времени ("горит" основной проект).
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Снова прошу помощи, нужна помощь в составлении запроса.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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