MySQL Выберите на основе временного диапазона - PullRequest
1 голос
/ 03 марта 2020

У меня есть база данных слотов, которые имеют время начала и время окончания (Дата также, но это, кстати). Таким образом, некоторые примерные результаты зарезервированных слотов в базе данных будут:

----------------------------------
start_time        -  end_time    -
----------------------------------
09:00                15:00
17:00                18:00
19:00                21:00
----------------------------------

Итак, допустим, я хочу проверить наличие следующих значений:

09:00 - 10:00 - ( This is Unavailable in the results above )
18:00 - 19:00 - ( Available based on the results above )

Что было бы MySQL запрос, чтобы справиться с этим?

Ответы [ 2 ]

1 голос
/ 03 марта 2020
SELECT *,
       NOT EXISTS ( SELECT NULL
                    FROM timeslot
                    WHERE timeslot.time_start < timerange.time_end
                      AND timerange.time_start < timeslot.time_end ) is_available
FROM timerange

скрипка

0 голосов
/ 03 марта 2020
SELECT COUNT(*) FROM slots WHERE end_time>:from AND start_time<:to

Если он вернет ноль, вы можете go.

Примеры:

SELECT COUNT(*) FROM slots WHERE end_time>'09:00' AND start_time<'10:00'

-> 1: недоступно

SELECT COUNT(*) FROM slots WHERE end_time>'18:00' AND start_time<'19:00'

-> 0: доступно

SELECT COUNT(*) FROM slots WHERE end_time>'14:30' AND start_time<'15:30'

-> 1: недоступно

SELECT COUNT(*) FROM slots WHERE end_time>'16:30' AND start_time<'17:30'

-> 1: недоступно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...