Ближайшие дни рождения
Понадобилось мне на днях вывести из базы данных список пользователей, показывающий ближайшие 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 раза поможет решить эту проблему.