Доброго дня, джентльмены. Есть следующая задача:
Есть база данных в которую записаны даты начала и завершения мероприятий, например:
- id:1, start:2019-02-10, final: 2019-02-15.
- id:2, start:2019-02-20, final: 2019-02-22.
- id:3, start:2019-02-25, final: 2019-02-28.
И так далее.
Необходимо составить запрос таким образом, чтобы он проверял можно ли между уже имеющимися мероприятиями добавить еще одно. Т.е. если мы приходит start:2019-02-16, final:2019-02-18, то запрос должен вернуться пустым. Это будет означать, что можно добавить еще одно мероприятие. Если же начало или конец мероприятия налагается на другое мероприятие, то запрос должен вернуться с id того мероприятия(ий), которое попало в диапазон нового мероприятия.
Рисунок 1.
Черный штрих - это время.
Зеленые эллипсы - это запланированные мероприятия.
Красные эллипсы - это мероприятия, которые запланировать не возможно.
Синий эллипс - это мероприятие, которое можно запланировать.
Нашел в интернете такой пример:
airbnb.ru, да собственно в любом сервисе по бронированию чего-либо это есть.
Подскажите, как можно это сделать или дайте почитать, где это может быть описано. Если у кого-то есть живой пример реализации на php или js, то буду очень благодарен за ссылку.