Потрібно написати SQL запит для системи бронювання
Привіт!
У мене є таблиця з бронюваннями деяких кімнат:
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 Good day
Я добре знаю SQL, можу виконати завдання, але мені знадобиться дамп бази даних, і яка саме база даних (MySql, Sql Server, Oracle тощо?)
Звертайтеся.
-
257 19 0 3 Добрий день, є готовий скрипт для букинг апки, я на ній працюю зараз, його потрібно підправити під вашу базу, але в цілому він повністю працюючий, написаний на JS можу написати на іншій мові, через чистий SQL буде занадто довгий запит, перевірено
Звертайтеся, домовимося за скрипт і відповім на будь-які інші питання
-
1323 35 1 Good day. Доброго дня. I am well-versed in SQL. Я добре розбираюсь в SQL. I would like to see the table dump, I will take the input data from the ТЗ. Хотілося б побачити дамп таблиці, вхідні дані візьму з ТЗ. I will make the query, send the result. Зроблю запит, відправлю результат.
-
2398 39 1 Good day.
Напишіть мені, обговоримо вашу проблему докладніше
Думаю я зможу вирішити ваше питання
-
В состоянии проверить - в состоянии сделать. Могу себе представить, чем могут окончиться эти простейшие упражнения. Час-два, конечно, не время.
-
У вас есть заполненные таблицы?
-
А какой клиент был в комнате, где room_id = 1
20.05.2024 в 16:00 из вашего примера?
Там вроде 3 брони на это время... -
> Нужно учесть, что комнат много, и необязательно, что если существует запись про бронь, то на это время заняты все комнаты.
ну і як це знати? наприклад у вас є 4 кімнати. для 3х з них в системі немає вільних слотів для заданого інтервалу. а для 4 нічого немає. тобто фізично вона у вас є, а "в системі" (цих 2х таблицях що ви привели) вона взагалі не світиться.
то як це знати?
-
Доброго дня.
На чому написано ваш сайт? -
Актуальні фриланс-проєкти в категорії Бази даних та SQL
Требується Senior Flutter + Backend розробник для створення MVP стартапу (аналог Uber для побутових послуг)
10 000 UAH
Шукаю досвідченого розробника (або невелику команду) для створення MVP мобільного додатку — сервісу термінового виклику спеціалістів за аналогією з Uber, Uklon Необхідна розробка: • мобільного додатку для iOS та Android (Flutter); • серверної частини (REST API); • панелі… Бази даних та SQL, Гібридні мобільні додатки ∙ 2 години 47 хвилин тому ∙ 16 ставок |
Парсинг бази
2000 UAH
Вимоги до каналів: 1.Мова контенту: Російська або українська (допускається змішаний контент RU/UA) 2.Кількість підписників: Не менше500 підписників 3.Активність: Останній пост опублікованийне пізніше ніж 32 години тому 4.Коментарі: В каналі повинні бутивідкриті коментарі під… Бази даних та SQL, Парсинг даних ∙ 1 день 8 годин тому ∙ 30 ставок |
Необхідно перевірити скриті та оновити дані в базі даних postgres.Необхідно виправити sql скрипти для бази postgres. Потрібно перевірити скрипти і оновити дані з зовнішніх таблиць Excel і між 2-ма базами (різні сервери) Postgres. Запуск скриптів через AnyDesk програма Navicat. Перелік даних для перевірки і коригування: 1. Товари, що… Бази даних та SQL ∙ 4 дні 11 годин тому ∙ 18 ставок |
Потрібен Airtable-архітектор для побудови relational schema та нового clean Airtable baseПотрібно допомогти переосмислити та побудувати чисту relational-схему для внутрішньої операційної системи на Airtable. Поточна база вже використовується командою, але вона виросла органічно: структура частково плоска, частина таблиць/в’юшок використовується активно, частина… Бази даних та SQL, Десктопні додатки ∙ 5 днів 4 години тому ∙ 10 ставок |
Платформа для навчання тренерів з баскетболу + Кастомізована CMSПлатформа освіти з баскетбольного тренерства + Кастомізована CMSОгляд проектуМи шукаємо досвідчену команду веб-розробників або full-stack розробника для створення сучасної платформи освіти з баскетбольного тренерства.Вебсайт надасть баскетбольним тренерам доступ до… Бази даних та SQL, Веб-програмування ∙ 5 днів 22 години тому ∙ 93 ставки |