Предотвратить встречи в тот же час MySql
Я надеюсь, что вы можете помочь мне разобраться с этой маленькой проблемой, которая у меня возникла с назначениями.
Получил таблицу под названием ЧАСЫ, которая показывает доступные часы и дни.
И стол под названием 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%'
Если я сделаю это, он вернет все часы из таблицы ЧАСОВ без 12:00, 12:30, что является правильным.
Я знаю, как сделать так, чтобы он не показывался 13:00, потому что продолжительность встречи с идентификатором 2 составляет 60 минут, и это ненормально прерывать встречу, чтобы взять другой xD
Так вот в чем проблема: как я могу избежать показа 11:30, если клиент хочет назначить встречу дольше, чем 30 минут?
Любые идеи, чтобы сделать это прямо на SQL? Или я должен сделать это позже, когда я положу это в стол?
1 ответ
Добавить встречу 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
это будет совпадать.