我正在开发一个预订系统,用户可以预订不同服务时长的服务。
我已经有一个存储预订信息的MySQL表格,一个可用时间段的表格和一个查询可以返回空闲时间段的结果。
我的“bookings”表格如下:
“datetimes” 表格包含每10分钟的时间间隔:
这是一个返回空闲时间段的查询:
如果服务持续时间少于25分钟,一切都没问题。问题出现在持续时间超过25分钟的服务上——我的查询会返回与已预订的10分钟服务重叠的时间段。例如,我已经预订了从13:00:00到13:09:59的服务,如果我查询1499秒的时间段,它会返回12:50:00,这将与下一个预订重叠。有人能帮我解决这个重叠服务的问题吗?
我已经有一个存储预订信息的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,这将与下一个预订重叠。有人能帮我解决这个重叠服务的问题吗?