Mysql: выбрать по пересечению даты, а не между - PullRequest
0 голосов
/ 02 июня 2019

У меня есть система заказа.В БД у меня есть таблица с заблокированными датами для системы заказов (когда клиент хочет отключить его по какой-то причине, например, в отпуске).Система заказов позволяет оформить заказ в течение следующих четырех недель с момента фактической даты.

В качестве ввода у меня в PHP $startDT и $endDT Каждая блокировка в дБ имеет свои valid_from и valid_to столбцы

Проблема с долговременными блокировками (например, месяц), когда valid_from и valid_to находятся вне периода времени для создания заказа.

enter image description here

Для краткосрочных и среднесрочных блокировок хорошо работает этот код:

SELECT * FROM `vk_blocking` WHERE (`valid_from` BETWEEN '$startDt' AND '$endDt') OR (`valid_to` BETWEEN '$startDt' AND '$endDt')

Но в показанном долгосрочном (ID: 3) есть valid_from или valid_to между $startDt и $endDt

Как попросить MySQL вернутьтакже на длительный срок?Есть ли что-то вроде

SELECT * FROM `vk_blocking` WHERE DATERANGE(`valid_from`, `valid_to`) INTERSECTS DATERANGE($startDt, $endDt)

1 Ответ

1 голос
/ 02 июня 2019

То, что вы хотите, может быть достигнуто с помощью:

SELECT * FROM `vk_blocking` WHERE `valid_from`<= $endDt AND $startDt<= `valid_to`

Это гарантирует, что оба диапазона имеют хотя бы один общий день.

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