防止同一小时内的约会 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 中重叠的行。