MySQL получает записи между / более двух переменных даты

У меня есть вопрос MySQL. Я использую Laravel в примерах ниже, но мой вопрос скорее связан с MySQL.

Предположим, у меня есть таблица встреч. Встреча может быть любой продолжительности.

Итак, у меня 2 встречи;

  1. Назначение А: 2 марта 2019 года с 10:00 до 11:00.
  2. Назначение B: 1 марта 2019 г. с 23:00 до 2 марта 2019 г. 9:00

Так; если я буду искать записи между 1 и 2 марта — я получу 2 результата. Что-то вроде «где дата <= 1 марта И <= 2 марта «

Не обращайте внимания на команду — это всего лишь пример.

Суть в том, что если я буду искать записи с 1 по 2 марта, я получу две встречи.

Мой вопрос, хотя; что если у меня будет мероприятие с 29 апреля по 4 марта?

В качестве примера;

  1. Назначение А: 2 марта 2019 года с 10:00 до 11:00.
  2. Назначение B: 1 марта 2019 г. с 23:00 до 2 марта 2019 г. 9:00
  3. Назначение C: 29 апреля 15:00 — 4 марта 16:00

Так что, если у меня есть две даты, и я говорю «ГДЕ дата> = 2019-03-01 И <= 2019-03-02 «- тогда я все равно получу Назначение А и Назначение Б.

Но на самом деле пространство будет занято из-за назначения С

Как я могу все еще искать записи между двумя переменными даты — НО способ найти Встречу C также?

Так что, в основном, при составлении / составлении календаря у меня должен быть свой лист календаря, и я вижу Встречу А и Встречу Б — но я также должен видеть Встречу С как события целого дня.

Я не хочу выбирать все записи о встречах из базы данных и сортировать их — я надеюсь на лучшее решение.

0

Решение

Время
Представьте, что мы должны найти события, которые происходят между t1 и t2. Например, у нас есть события, которые охватывают между a1 и a2, b1 и b2 и c1 и c2.

Согласно тому, что вы говорите, следующая формула удовлетворит ваш запрос:

  1. Если событие начинается ДО запрошенного t1, оно должно закончиться после t1
  2. Если событие начинается ПОСЛЕ (или в момент времени t1), вам нужно проверить, начинается ли оно раньше, чем запрошено время t2.
SELECT * FROM some_table WHERE (start_date < t1 AND end_date > t1) OR (start_date >= t1 AND start_date < t2)

Вот t1 а также t2 являются границами запрошенного диапазона, start_date а также end_date столбцы, которые хранят соответствующие данные в MySQL.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector