防止同一小时内的约会 MySql
Prevent appointments in the same hour MySql
我希望你能帮我解决这个关于约会的小问题。
得到一个名为 HOURS 的 table,它显示可用的时间和日期。
table Hours
还有一个名为 APPOINTMENTS 的 table 客户接受。
table Appointments
这是我的 select 查询,以了解哪些时间可用:
SELECT *
FROM Hours T1
WHERE NOT EXISTS (
SELECT T2.Hours
FROM Appointments T2
WHERE T2.hour = T1.hour
AND T2.date = '17/08/2018'
)
AND T1.days LIKE '%SAT%'
如果我这样做,它将 return 从 table HOURS 开始的所有时间,没有 12:00,12:30 这是正确的。
我知道怎么让它不显示了13:00 因为 ID 为 2 的约会的持续时间是 60 分钟,打断约会去其他地方是不正常的 xD
问题来了:如果客户想要预约超过 30 分钟,我如何避免显示 11:30?
有什么想法可以直接在 sql 上实现吗?或者我应该稍后再将其放入 table?
将约会 duration
添加到约会 hour
,并检查它是否小于 hour
小时数。
我还会使用反连接模式而不是 NOT EXISTS
像这样:
SELECT h.hour
FROM Hours h
LEFT
JOIN Appointments a
ON a.date = '17/08/2018'
AND a.hour + INTERVAL 0 MINUTE >= h.hour + INTERVAL 0 MINUTE
AND a.hour + INTERVAL a.duration MINUTE < h.hour + INTERVAL 0 MINUTE
WHERE a.hour IS NULL
AND h.days LIKE '%SAT%'
这将 return hours
中不与现有 appointment
重叠的行。如果我们想检查约会是否有整整一个小时,我们需要将 60 分钟传递到查询中,以便我们可以匹配 hours
中重叠的行。
我希望你能帮我解决这个关于约会的小问题。
得到一个名为 HOURS 的 table,它显示可用的时间和日期。
table Hours
还有一个名为 APPOINTMENTS 的 table 客户接受。
table Appointments
这是我的 select 查询,以了解哪些时间可用:
SELECT *
FROM Hours T1
WHERE NOT EXISTS (
SELECT T2.Hours
FROM Appointments T2
WHERE T2.hour = T1.hour
AND T2.date = '17/08/2018'
)
AND T1.days LIKE '%SAT%'
如果我这样做,它将 return 从 table HOURS 开始的所有时间,没有 12:00,12:30 这是正确的。
我知道怎么让它不显示了13:00 因为 ID 为 2 的约会的持续时间是 60 分钟,打断约会去其他地方是不正常的 xD
问题来了:如果客户想要预约超过 30 分钟,我如何避免显示 11:30?
有什么想法可以直接在 sql 上实现吗?或者我应该稍后再将其放入 table?
将约会 duration
添加到约会 hour
,并检查它是否小于 hour
小时数。
我还会使用反连接模式而不是 NOT EXISTS
像这样:
SELECT h.hour
FROM Hours h
LEFT
JOIN Appointments a
ON a.date = '17/08/2018'
AND a.hour + INTERVAL 0 MINUTE >= h.hour + INTERVAL 0 MINUTE
AND a.hour + INTERVAL a.duration MINUTE < h.hour + INTERVAL 0 MINUTE
WHERE a.hour IS NULL
AND h.days LIKE '%SAT%'
这将 return hours
中不与现有 appointment
重叠的行。如果我们想检查约会是否有整整一个小时,我们需要将 60 分钟传递到查询中,以便我们可以匹配 hours
中重叠的行。