Я пытаюсь получить ближайшие дни рождения из базы данных, чтобы создать список рассылки для этих клиентов. $ pet_bdate - Администратор поставляет дату с датпикером JQuery в формате dateFormat: 'yy-mm-dd'. $ plus_days - Он может также выбрать для дат Диапазон - Plus дней от выбранной даты от 0 до 14.Php MySql запрос на день рождения между датами, игнорирующими год
сервера конфигурации: Php v 5.2.17 MySQL v 5.5.23 (Так несколько более продвинутых Php функции не работают, а также MySql)
колонка petbday имеет тип ДАТА.
Вот запрос:
SELECT * FROM `customer` c LEFT JOIN `pet` p ON (c.customer_id = p.customer_id)
WHERE (DATE_FORMAT(p.petbday, '%m-%d')
BETWEEN DATE_FORMAT(2014-04-13, '%m-%d') AND DATE_FORMAT(DATE_ADD(2014-04-13, INTERVAL 7 DAY), '%m-%d'))
GROUP BY c.customer_id ORDER BY firstname, lastname, email
А вот код Php, что делает его:
SELECT * FROM `" . DB_PREFIX . "customer` c LEFT JOIN `" . DB_PREFIX . "pet` p ON (c.customer_id = p.customer_id)
WHERE (DATE_FORMAT(p.petbday, '%m-%d') BETWEEN DATE_FORMAT(" . $pet_bdate . ", '%m-%d') AND DATE_FORMAT(DATE_ADD(" . $pet_bdate . ", INTERVAL " . $plus_days . " DAY), '%m-%d')) GROUP BY c.customer_id ORDER BY firstname, lastname, email
Этот запрос возвращает ZERO строки на дату, которая имеет дни рождения в БД.
Как передать отформатированную дату для запроса, чтобы игнорировать год?
Я попытался сформировать его перед передачей его на запрос, но когда дело доходит до расчета дат с Php, я немного перепутался.
Любые предложения по устранению этого?
Thanx.Я упомянул об этом в своем решении до просмотра вашего обновления :-) – Jadeye
Это не работает, если вы начинаете/заканчиваете границу года. –