Ближайшие дни рождения

22.09.2012

Понадобилось мне на днях вывести из базы данных список пользователей, показывающий ближайшие 10 дней рождения. Поиск в интернете дал несколько вариантов но они были ужасно громоздкие. Поэтому, сейчас я покажу Вам свой способ.

Birthday

Первым, о чём я вспомнил, была функция DATE_FORMAT(), которую я уже рассматривал ранее. И всё что было нужно - отбросить год у поля `birthday` и у текущей даты и сравнить их.

И как результат мы получим следующий запрос:

SELECT * 
FROM  `user` 
WHERE DATE_FORMAT(`birthday`, '%m %d') > DATE_FORMAT(CURRENT_DATE, '%m %d') 

Запрос работает вполне корректно и возвращает все дни рождения, которые больше текущей даты. Что бы отсортировать даты, допишем в ORDER BY следующее:

SELECT * 
FROM  `user` 
WHERE DATE_FORMAT(`birthday`, '%m %d') > DATE_FORMAT(CURRENT_DATE, '%m %d') 
ORDER BY DATE_FORMAT(`birthday`, '%m %d')

А для того, что бы выбрались только последние 10. Добавим LIMIT 10 в самый конец запроса.

Как видите всё довольно просто. Но есть одно, но список будет выводится только на этот год. Т.е. если выполнить этот запрос в конце декабря, то он покажет только дня рождения до конца года. Январские захватываться не будут. Но увеличение этого запроса в 2 раза поможет решить эту проблему.