mysql для проверки Инструктор доступен для урока в выбранное время

0

У меня есть календарь бронирования уроков, и я пытаюсь проверить, зарезервирован ли Инструктор в указанное время или доступен.

У меня есть следующая таблица для сохранения lesson_registrations

| id | InstructorId | startTime    | endTime      |
|  1 | 2            | 201806271100 | 201806271200 |
|  2 | 2            | 201806271400 | 201806271500 |

Поэтому в соответствии с этой таблицей Инструктор доступен для урока между 201806271200 и 201806271400 но когда я запускаю следующий запрос, он отмечает, что Инструктор будет забронирован.

SELECT * FROM lesson_registrations 
WHERE 
((startTime BETWEEN '201806271200' AND '201806271400' ) 
 OR (endTime BETWEEN '201806271200' AND '201806271400') 
 OR ('201806271200' BETWEEN startTime AND endTime) 
 OR ('201806271400' BETWEEN startTime AND endTime) ) 

Что я здесь делаю неправильно?

Спасибо

Теги:

2 ответа

0

Я думаю, что, поскольку между включенными, оператор захватывает записи с 201806271200 как время окончания. Если вы выполните следующее, вы не получите никаких результатов, показывающих, что есть уроки.

SELECT * FROM lesson_registrations
WHERE 
(startTime BETWEEN '201806271159' AND '201806271359' ) 

да 1200 считается конечным временем, поэтому время начала следующего должно быть в 1201, или время конца должно быть в 1159, а время начала может быть 1200

0

Правильная логика нахождения совпадений:

select lr.*
from lesson_registrations lr
where lr.startTime < 201806271400 and
      lr.endTime > 201806271200;

Получить инструкторов, которые доступны:

select i.*
from instructors i
where not exists (select 1
                  from lesson_registrations lr
                  where lr.instructorId = i.instructorId and
                        lr.startTime < 201806271400 and
                        lr.endTime > 201806271200
                 );

Логика в основном говорит о том, что инструктор недоступен, если выполняются следующие два условия:

  • Урок начинается в любое время до окончания времени.
  • Тот же урок заканчивается в любое время после начала.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню