mysql — Выберите все, где переменная даты находится между столбцом STARTDATE и столбцом ENDDATE.

У меня есть форма, где пользователь выбирает месяц и просматривает все записи, которые попадают в этот месяц. База данных записывает дату начала и дату окончания.

Мне нужно запросить все записи, которые находятся между этой датой начала и датой окончания. Поэтому я не могу запросить MONTH(Data.startdate) <= $month потому что мне нужно, чтобы это было между датами начала и окончания. По сути, мне нужно, чтобы это было:
Дата начала < месяц < Дата окончания

Поэтому, если пользователь выбирает «Февраль», мне нужно не только включить записи, где startdate = 2, но мне нужно выбрать все те, где февраль находится между датой начала и датой окончания.

Я не могу придумать способ BETWEEN работать для этого, так как я думаю, что имя столбца должно быть первым, а диапазон дат — переменными.

ОБНОВИТЬ
Поскольку я ищу несколько месяцев, мне пришлось использовать комбинацию ответа ниже в скобках с ИЛИ между ними.

Запрос для справки: SELECT * FROM Data INNER JOIN Section on Data.section_id = Section.section_id INNER JOINТипon Data.type_id = Type.type_id INNER JOIN Company on Data.company_id = Company.company_id INNER JOIN Materials on Data.materials_id = Materials.materials_id INNER JOIN Marked on Data.marked_id = Marked.marked_id WHERE Section.section_id = 1 AND YEAR(Data.data_startdate) = 2015 AND ((MONTH(Data.data_startdate) <= 1 AND MONTH(Data.data_enddate) >= 1) OR (MONTH(Data.data_startdate) <= 2 AND MONTH(Data.data_enddate) >= 2)) ORDER BY Data.data_startdate, Data.section_id, Data.type_id ASC

Однако когда я перебираю результаты, результат отображается только один раз, потому что это всего лишь одна запись. Как мне просмотреть результаты и показать что-то вроде того, что показано ниже, без необходимости многократно просматривать весь массив результатов и сверять каждый результат с месяцем. Я хочу отобразить:
ВСЕ РЕЗУЛЬТАТЫ, ПОКАЗАЮЩИЕСЯ В ЯНВЕ
ВСЕ РЕЗУЛЬТАТЫ, ЗАХОДЯЩИЕ В ФЕВРАЛЬ

Прямо сейчас результаты отображаются как:
ВСЕ РЕЗУЛЬТАТЫ НАЧИНАЮТСЯ В ЯНВЕ
ВСЕ РЕЗУЛЬТАТЫ НАЧИНАЮТСЯ В ФЕВРАЛЕ

Может быть, есть способ разделить запросы на суб-массивы или что-то?

Например, если я выберу только февраль, ни один из результатов, начиная с января, не будет отображаться.

-1

Решение

WHERE MONTH(Data.startdate) <= $month
AND MONTH(Data.enddate) >= $month
1

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

использование

SELECT * FROM mytable WHERE $month BETWEEN MONTH(startDate) AND MONTH(endDate)
1

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