Я надеюсь, что вы можете помочь мне разобраться с этой маленькой проблемой, которая у меня возникла с назначениями.
Получил таблицу под названием ЧАСЫ, которая показывает доступные часы и дни.
И стол под названием 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? Или я должен сделать это позже, когда я положу это в стол?
Добавить встречу 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
это будет совпадать.
Других решений пока нет …