MySQL получает записи между / более двух переменных даты - PullRequest
0 голосов
/ 12 мая 2018

У меня вопрос по 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 марта» </p>

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

Суть в том, что если я буду искать записи в период с 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» - тогда я все равно получу Назначение А и Назначение Б. </p>

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

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

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

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

1 Ответ

0 голосов
/ 12 мая 2018

time Представьте, что мы должны найти события, которые происходят между 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.

...