SQL - Проверьте, существует ли перекрывающийся рабочий час - PullRequest
1 голос
/ 07 апреля 2019

У меня следующая схема базы данных (где значение дня 0=mon,1=tue,2=wed и т. Д.)

enter image description here

И следующий ввод

{
    "day": 3,
    "start_time": "15:00",
    "end_time": "17:30"
},
{
    "day": 5
    "start_time": "08:00",
    "end_time": "12:00"
}

Я хочу узнать, содержит ли входное значение какую-либо перекрывающуюся запись из базы данных. (обратите внимание, что в моем случае у меня может быть несколько start_time, end_time для данного дня)

Вот что я попробовал.

SELECT
    COUNT(id) AS total_count
FROM
    working_hour
WHERE (
    (day = 3 AND (start_time <= '15:00' AND end_time >= '17:30')) ||
    (day = 5 AND (start_time <= '08:00' AND end_time >= '12:00'))
) AND user_id = 1;

Это возвращает мне общее количество 0, тогда как я ожидаю 1, потому что на day = 3 у нас есть совпадающая перекрывающаяся запись с идентификатором 5

Где я здесь не так?

Спасибо.

1 Ответ

1 голос
/ 07 апреля 2019

Я считаю, что логика, которую вы хотите, это:

SELECT COUNT(*) AS total_count
FROM working_hour
WHERE user_id = 1 AND
      ((day = 3 AND start_time <= '17:30' AND end_time >= '15:00') OR
       (day = 5 AND start_time <= '12:00' AND end_time >= '8:00')
      ) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...