Я пытаюсь получить следующий доступный интервал времени, проверяя список зарезервированных времен в таблице. Каждое резервирование может быть минимумом увеличения на 1 час и может продолжаться весь день. Так, например, если номер забронирован с 9:00 до 10:00 и с 12:00 до 15:00, и я пытаюсь получить первый доступный слот после 9:00. Будет 10 утра.
Я могу оставить соединение на столе и получить доступность комнаты, но только не временные интервалы.
Вот моя связанная схема:
Бронирование
res_id | hotel_id | room_id | res_start | res_end
Номера:
room_id | hotel_id | room_name | room_number
Вот мой запрос:
SELECT free_from, free_until
FROM (
SELECT a.res_end AS free_from,
(SELECT MIN(c.res_start)
FROM reservations c
WHERE c.res_start > a.res_end) as free_until
and b.res_end > "2019-01-05 11:00:00"
FROM reservations a
WHERE NOT EXISTS (
SELECT 1
FROM reservations b
WHERE b.res_start > a.res_end
)
) as d
ORDER BY free_until-free_from
Но мне возвращают неверное время.
Ожидаемый результат:
room_id | room_name | Next available time
1 | "Single" | 2019-01-05 10:00:00
Вот таблица временных интервалов
CREATE TABLE time_slots
(`slot` time);
INSERT INTO time_slots
(`slot`)
VALUES
('00:00:00'),
('01:00:00'),
('02:00:00'),
('03:00:00'),
('04:00:00'),
('05:00:00'),
('06:00:00'),
('07:00:00'),
('08:00:00'),
('09:00:00'),
('10:00:00'),
('11:00:00'),
('12:00:00'),
('13:00:00'),
('14:00:00'),
('15:00:00'),
('16:00:00'),
('17:00:00'),
('18:00:00'),
('19:00:00'),
('20:00:00'),
('21:00:00'),
('22:00:00'),
('23:00:00');