У меня есть таблица, которую я пытаюсь запросить у себя, и я не знаю, как это сделать.
Название таблицы: расписание
- user_id
- StartDate
- EndDate
- sequencyID
Ситуация такова, что у меня есть ряд строк, где user_id = 0. Это представляет открытый график, на который кто-то может претендовать. Если заявлено расписание, ему присваивается определенный идентификатор пользователя. Вот тут-то и возникает сложная часть. Я пытаюсь выбрать пользователя и отобразить расписание, которое не совпадает с тем, что уже было принято или запланировано.
Вот что у меня есть
SELECT *
FROM schedule
WHERE user_id = 123456;
Это дает мне все диапазоны раз, когда человек уже принял
SELECT *
FROM schedule
WHERE user_id = 0;
Это возвращает мне все доступные строки расписания. Я не совсем уверен, как объединить их так, чтобы конечный результат представлял собой список элементов расписания, чьи user_id = 0 и startdate / enddate не существуют между startdate и заканчиваются теми, которые уже назначены пользователю.
Я бы подумал, что это будет что-то вроде
SELECT *
FROM schedule
WHERE user_id = 0
AND (loop through schedule rows testing for
(startdate < loopstartdate and enddate < loopstartdate) ||
(startdate > loopenddate)
Где то, с чем я борюсь. Есть идеи? Если бы кто-то мог по крайней мере указать мне правильное направление, какой механизм я бы использовал, чтобы начать решать этот тип проблемы, это было бы здорово.