Как найти список будущих дней рождений. PHP & MySQL.
Имеем табличку с пользователями, в поле BIRTH_DAY (date) записана дата рождения, например 1980-06-13,
а так-же текущее время в UNIX_TIMESTAMP, скажем 1089891796 (иногда бывает удобно в начале пргораммы зафиксировать время, а не пользоваться в запросах
вызывом NOW()).
Дальше, берём и пишем запрос:
select ID,
concat(if ((@difference:= date_format(BIRTH_DAY, '%m%d')
- date_format(from_unixtime(1089891796),'%m%d')) < 0, 1, 0)
+ (@year:= extract(year from from_unixtime(1089891796))),
'-', date_format(BIRTH_DAY, '%m-%d')) as NEXT_BIRTH_DAY,
@difference != 0,
@year - date_format(BIRTH_DAY, '%Y') + (@difference < 0)
from USERS
order by NEXT_BIRTH_DAY asc
limit 10
В результате получим несколько строк со слебующими столбцами:
- id пользователя,
- дату следующего (текущего) дня рождения,
- флаг: true (1) - если день рождения сегодня,
- сколько человеку исполнится лет.
|