Предотвратить встречи в тот же час 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 это будет совпадать.

Другие вопросы по тегам