OtshelnikFm
@OtshelnikFm
Обо мне расскажет yawncato.com

Ошибка в запросе при переходе через год. где ошибся?

Привет.
Виджет именинников. Выводит предстоящие дни рождения - на месяц вперед. При выводе с октября по ноябрь - все работало замечательно, а с декабря по январь (новый год), не возвращает результат. 0 строк.

Имеется примерно такая структура таблицы с именинниками
meta_value 	meta_key 	
1976-12-15 	dob
1976-12-31 	dob
1984-01-01 	dob
1989-12-24 	dob


SELECT 
    t_meta.meta_value,t_meta.meta_key
FROM 
    `wp_usermeta` AS t_meta
WHERE 
    t_meta.meta_key LIKE 'dob' 
AND 
    DATE_FORMAT(t_meta.meta_value,'%m-%d') 
    BETWEEN 
    DATE_FORMAT((NOW() - INTERVAL 1 DAY),'%m-%d') AND DATE_FORMAT((NOW() + INTERVAL 1 MONTH),'%m-%d')
ORDER BY 
DATE_FORMAT(t_meta.meta_value, '%m-%d')


Вот данный запрос перестал работать. Но когда в формате даты я указываю не месяц а + INTERVAL 22 DAY - то возвращает мне результаты (потому что я выбираю за декабрь - не затрагивая следующий месяц. Но такой способ перестанет работать я думаю числа 9-10-го декабря). Проблема именно при переходе с 12 месяца на 1й. Возвращает 0 строк.

Подскажите где закралась ошибка выборки между двумя диапазонами.
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вы сравниваете их как строки.
очевидно что
DATE_FORMAT(t_meta.meta_value,'%m-%d') 
    BETWEEN 
"12-15" and "01-15"

дает пустоту, т.к второе значение меньше первого.

Правильное решение - определять нужные интервалы на php корректно обрабатывая смену года.

DATE_FORMAT(t_meta.meta_value,'%m-%d') 
    BETWEEN 
"12-15" and "12-31" 
OR 
DATE_FORMAT(t_meta.meta_value,'%m-%d') 
    BETWEEN 
"01-01" and "01-15"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы