【发布时间】:2020-02-11 03:32:35
【问题描述】:
我正在尝试通过检查表中的保留时间列表来获取下一个可用时间段。每次预订可以至少增加 1 小时,并且可以持续一整天。例如,如果房间从上午 9 点到 10 点预订,从 12 点到下午 3 点,我试图在上午 9 点之后获得第一个可用位置。现在是上午 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
这是一个 time_slots 表
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');
【问题讨论】:
-
如果上一个时段结束,为什么下一个可用时段不在上午 10 点?
-
@Nick 你是对的。我编辑了它
标签: mysql sql database relational-database