Нужно написать SQL запрос для системы бронирования
600 UAHЗдравствуйте!
У меня есть таблица с бронями некоторых комнат:
CREATE TABLE `booking` ( `id` int(11) NOT NULL, `room_id` int(11) DEFAULT NULL, `client_id` int(11) DEFAULT NULL, `timestamp_from` int(11) DEFAULT NULL, `timestamp_to` int(11) DEFAULT NULL, `status_id` int(11) DEFAULT NULL, `guests` int(11) DEFAULT NULL, `type` int(11) DEFAULT NULL, `tariff` int(11) DEFAULT NULL, `comment` text DEFAULT NULL, `created_by` int(11) DEFAULT NULL, `updated_by` int(11) DEFAULT NULL, `created_at` int(11) DEFAULT NULL, `updated_at` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
так же таблица статусов:
CREATE TABLE `booking_status` ( `id` int(11) NOT NULL, `booking_id` int(11) DEFAULT NULL, `status` int(11) DEFAULT NULL, `created_by` int(11) DEFAULT NULL, `updated_by` int(11) DEFAULT NULL, `created_at` int(11) DEFAULT NULL, `updated_at` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
Задача такая:
Мне нужен SQL запрос, который бы принимал параметры:
- timestamp_from – время начала поиска
- timestamp_to – время окончания поиска
- duration – длительность (в секундах)
- slot_interval – интервал слота (в секундах)
- by_room – учитывать ли комнаты
В ответ запрос отдавал бы мне все возможные комбинации свободных "слотов" для бронирования (свободные - это то время, на которое на данный момент нет активной брони на определенную комнату).
Слот – это промежуток времени, длительностью в duration, у которого есть время начала и время окончания, а так же номер комнаты.
Нужно учесть, что комнат много, и необязательно, что если существует запись про бронь, то на это время заняты все комнаты.
Так же, нужно учитывать, что брони могут быть удалены (booking_status.status = 0), в таком случае мы считаем что это свободное время, и на него можно генерировать слоты.
И обязательно, если уже существует активная бронь, то слоты должны генерироваться с учетом 30-минутного интервала до и после уже активной брони.
Параметр by_room определяет, нужно ли отдавать конкретную комнату или нет. Если да, то запрос должен выдать все слоты для всех комнат по отдельности. Если нет, то запрос должен выдать вообще свободные слоты (допустим, если на заданное время на бронь на одну комнату, но нет на другую – запрос должен выдать этот слот как свободный)
Пример (берем в рассчет, что у нас всего ОДНА комната, и других нет):
У меня есть две брони на ОДНУ комнату:
1) 20.05.2024 10:00 – 20.05.2024 14:00
2) 20.05.2024 18:00 – 20.05.2024 22:00
Я ввожу в запрос такие данные:
timestamp_from – 20.05.2024 10:00 (естественно в таймстапе)
timestamp_to – 20.05.2024 23:00 (естественно в таймстапе)
duration – 7200 (2 часа в секундах)
slot_interval – 1800 (30 минут)
by_room – true
В ответ я должен получить такой массив (все даты должны быть в таймстампах!!!):
room_id: 1, start: 20.05.2024 14:30, end: 20.05.2024 16:30;
room_id: 1, start: 20.05.2024 15:00, end: 20.05.2024 17:00;
room_id: 1, start: 20.05.2024 15:30, end: 20.05.2024 17:30;
Если в какой-то из этих промежутках была бы удаленная бронь, она бы не учитывалась!!!!
Если бы у нас в распоряжении было бы больше комнат, и на них не было бы броней – то для них было бы куча слотов на весь день.
Оплата происходит после всех тестов с моей стороны и внесения правок со стороны исполнителя.
Использования разного рода ИИ недопустимо.
-
91 1 0 Доброго! Большой опыт в разработке подобных задач более 20 лет. Готов помочь после ознакомления со структурой таблиц и ТЗ под какое это все делалось. Судя по требованиям у вас со структурой борода и не хватает поля или еще одной таблицы...
-
456 1 0 Добрый день
Я хорошо знаю SQL, могу сделать задание , но нужен будет дамп базы, и какая именно база данных (MySql , Sql Server, Oracle etc ?)
Обращайтесь.
-
257 19 0 3 Добрый день, есть готовый скрипт для букинг аппки, я на ней работаю сейчас, его нужно подправить под вашу базу, но в целом он полностью рабочий, написан на JS могу написать на другом языке, через чистый SQL будет слишком долгий запрос, проверено
Обращайтесь, договоримся за скрипт и отвечу на любые другие вопросы
-
1328 35 1 Добрый день. Хорошо разбираюсь в sql. Хотелось бы увидеть дамп таблиц, входные данные возьму из ТЗ. Сделаю запрос, вышлю результат.
-
2398 39 1 Добрый день.
Напишите мне, обсудим вашу проблему подробнее
Думаю я смогу решить ваш вопрос
-
В состоянии проверить - в состоянии сделать. Могу себе представить, чем могут окончиться эти простейшие упражнения. Час-два, конечно, не время.
-
У вас есть заполненные таблицы?
-
А какой клиент был в комнате, где room_id = 1
20.05.2024 в 16:00 из вашего примера?
Там вроде 3 брони на это время... -
> Нужно учесть, что комнат много, и необязательно, что если существует запись про бронь, то на это время заняты все комнаты.
ну і як це знати? наприклад у вас є 4 кімнати. для 3х з них в системі немає вільних слотів для заданого інтервалу. а для 4 нічого немає. тобто фізично вона у вас є, а "в системі" (цих 2х таблицях що ви привели) вона взагалі не світиться.
то як це знати?
-
Доброго дня.
На чому написано ваш сайт? -
Актуальные фриланс-проекты в категории Базы данных и SQL
Доопрацювання 1С УТ 11 для ТСД Zebra (RDP): різні звукові сигнали при скануванні
1000 UAH
Конфигурация: 1С УТ 11 Адресный склад ТСД Zebra TC26 Работа через RDP Сканирование товаров выполняется в документах приемки, размещения, отбора и других складских операциях. Текущая проблема: Кладовщики работают через ТСД Zebra. При сканировании не всегда замечают сообщения на… C#, Базы данных и SQL ∙ 19 часов 13 минут назад ∙ 5 ставок |
Восстановить конфигурацию 1с
5000 UAH
Конфигурация CRM & ERP SmartCeiling (2.8.26.0) Защита через Регистрационный Код. Зарегистрирована до конца года. Базы данных и SQL ∙ 1 день 10 часов назад ∙ 7 ставок |
Нужен специалист 1С для доработок и разработкиИщу специалиста по 1С для сотрудничества на фрилансе. В настоящее время уже работаю с подрядчиком, который обеспечивает поддержку и обслуживание системы 1С. Однако из-за загруженности подрядчика возникает необходимость в оперативном выполнении дополнительных задач, доработок и… Базы данных и SQL ∙ 6 дней 9 часов назад ∙ 12 ставок |
Восстановление инстаграм после блокировки3 марта 2026 г заблокировали инстаграм с причиной нарушения правил. Считаю произошла какая то ошибка, так как страничка была личной с фото и видео личных поездок. Коментарии и тд я не писала нигде. Отправляла несколько раз на обжалование. Не могу скачать свои файлы, так как не… Базы данных и SQL, Веб-программирование ∙ 6 дней 20 часов назад ∙ 6 ставок |
Устранить проблему неполного импорта данных из Excel-файлов спецификаций Новой Почты в 1С:
2000 UAH
Цель: Есть обработка в 1с по загрузке спецификации Новой почти. По непонятнім причинам перестало подгружать некоторіе табличніе данніе Нужно найти причину и Устранить проблему неполного импорта данных из Excel-файлов спецификаций Новой Почты в 1С: Малый Бизнес. Текущее… Администрирование систем и сетей, Базы данных и SQL ∙ 10 дней 3 часа назад ∙ 16 ставок |