【发布时间】:2017-11-20 23:47:19
【问题描述】:
我正在开发一个预订系统,用户应该可以在其中预订具有不同服务期限的服务。
我已经有一个 MySQL 表,用于存储预订、包含可用时隙的表和返回空闲时隙的查询。
我的bookings 表如下:
point_id start (datetime) end (datetime)
1 2017-06-17 14:50:00 2017-06-17 14:59:59
1 2017-06-17 15:10:00 2017-06-17 15:19:59
1 2017-06-17 15:40:00 2017-06-17 15:44:59
2 2017-06-17 15:50:00 2017-06-17 16:04:59
2 2017-06-17 16:05:00 2017-06-17 16:14:59
...
datetimes 表包含 10 分钟间隔:
datetime (datetime)
2017-06-17 14:40:00
2017-06-17 14:50:00
2017-06-17 15:00:00
2017-06-17 15:10:00
2017-06-17 15:20:00
2017-06-17 15:30:00
2017-06-17 15:40:00
...
这里是返回空闲时隙的查询:
SELECT
a.datetime AS blockstart,
DATE_ADD(a.datetime, INTERVAL 599 SECOND) AS blockend
FROM
datetimes a
LEFT JOIN
(
SELECT *
FROM bookings
WHERE point_id = 1
) b ON
(a.datetime BETWEEN b.start AND b.end)
OR
(DATE_ADD(a.datetime, INTERVAL 599 SECOND) BETWEEN b.start AND b.end)
WHERE b.id IS NULL AND a.datetime BETWEEN '2017-06-17 00:00:00' AND '2017-06-17 23:59:59';
如果服务时间少于 25 分钟 - 一切正常。 问题在于持续时间超过 25 分钟的服务 - 我的查询返回与已预订的 10 分钟服务重叠的时段。例如,我从 13:00:00 到 13:09:59 预订,如果我查询间隔 1499 秒,它返回 12:50:00,这将与下一次预订重叠。 谁能帮我解决这个重叠服务的问题?
【问题讨论】:
-
不,@Evert ,通过您的链接仅显示从 11:00 到 14:20 的时间间隔,但我的查询返回免费的 10 分钟时间间隔,选择其中一个记录客户的时间间隔这个选定的时间。
-
我不明白....在 datetimes 表中添加 9min 和 59sec...的原因是什么...是为了与 bookings 表进行比较/加入吗?
标签: mysql