Есть записи в базе данных о строительных объектах, у которых есть столбцы work_start_date и word_end_date, в которых хранятся даты начала и конца работы на объекте. Нужно сделать фильтр по диапазону дат, чтобы, например, по диапазону фильтра 15.09.2020 - 20.09.2020 выводились все объекты, работа на которых производилась в указанные в фильтре даты, даже если поле work_start_date в строке таблицы меньше, чем первое значение фильтра и поле work_end_date больше, чем второе значение фильтра.
То есть по фильтру 15.09.2020 - 20.09.2020 должны вывестись объекты с датами работ:
14.09.2020 - 18.09.2020
16.09.2020 - 18.09.2020
18.09.2020 - 21.09.2020
Есть ли возможность такое сделать? Натолкните, пожалуйста, в какую сторону искать, сам ничего не нашел
Даты хранятся в формате Y-m-d, получается вот такой запрос
SELECT * FROM `table` WHERE (work_start_date <= :'2021-09-08' AND work_end_date >= :'2021-09-18')
Но при его выполнении получается ошибка:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':'2021-09-08' AND work_end_date >= :'2021-09-18')
Видимо, я неправильно использовал двоеточие и оно тут не нужно.
Но тогда по такому запросу при фильтре 2021-09-15 - 2021-09-20 не выведется объект с датой работы, например 2021-09-17 - 2021-09-18
Rsa97, запрос использую без PDO, а используя $wpdb из вордпресса.
Код запроса такой получается
$works = $wpdb->get_results("SELECT * FROM `$table_name` WHERE (work_start_date <= '$date_start' AND work_end_date >= '$date_end')
Но выше написал, что такое условие не подходит, не выберутся объекты, у которых дата работ между датами фильтра
Это условие строится очень просто.
Есть два интервала (beginA, endA) и (beginB, endB). Какое условие непересечения интервалов? Очевидно, что интервалы не пересекаются, когда A находится правее B или B находится правее A. Запишем формально: beginA > endB || beginB > endA
Также очевидно, что условие пересечения интервалов - это отрицание условия непересечения.