- Автор темы
- #1
Код:
SELECT *,
DATEDIFF(CAST(CONCAT('2007-',DATE_FORMAT(`date_of_birth` '%m-%d')) AS DATE), NOW()) as `diff`
FROM `persona`
WHERE
DATEDIFF(CAST(CONCAT('2007-',DATE_FORMAT(`date_of_birth`,'%m-%d'))AS DATE), NOW()) >= 0
ORDER BY `diff`
ASC
LIMIT 0, 5;
CONCAT - присоединение. т.е. в итоге получаем 2007-05-16 от поля date_of_birth где хранится, например 1989-16-05. Текущий год лучше подсовывать в запрос в скрипте. а не делать DATE_FORMAT(NOW(),"%Y"). по-крайней мере я так советую.
Таблица `persona` - таблица в которой у вас хранится инфа по юзерам.
Поле `date_of_birth` типа DATE.
В столбце `diff` будет содержаться кол-во дней до дня рождения.
С помощью данного запроса мы получаем ближайшие 5 дней рождений у наших пользователей. Сортируем по столбцу diff - по количеству дней оставшихся до ДР в восходящем порядке (те у кого ДР ближе расположены первыми).