希望您能帮助我解决有关约会的小问题。
有一个名为HOURS的表,其中显示了可用的小时和天。
还有一个名为APPOINTMENTS的表,客户可以使用。
这是我的选择查询,以了解哪些时间可用:
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%'
如果我这样做,它将返回表HOURS中的所有小时数,而没有12:00、12:30,这是正确的。
我知道如何使其不显示13:00,因为ID为2的约会的持续时间为60分钟,并且不正常地中断约会以获取其他xD
这就是问题所在:如果客户要预约的时间超过30分钟,我该如何避免显示11:30?
有直接在sql上实现的想法吗?还是我以后把它放到桌子上时应该做?
答案 0 :(得分:0)
将约会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%'
这将返回hours
中与现有appointment
不重叠的行。如果要检查是否有一个整小时的约会,则需要在60分钟内传递到查询中,这样我们才能匹配hours
中重叠的行。