防止在同一小时内约会MySql

时间:2018-08-17 20:31:45

标签: php mysql html-table appointment

希望您能帮助我解决有关约会的小问题。

有一个名为HOURS的表,其中显示了可用的小时和天。

table Hours

还有一个名为APPOINTMENTS的表,客户可以使用。

table 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上实现的想法吗?还是我以后把它放到桌子上时应该做?

1 个答案:

答案 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中重叠的行。