это мой текущий SQL-запрос, который получает все предстоящие дни рождения моей компании в следующие 90 дней:
SELECT
user.birthday, user.name, MONTH(user.birthday)
AS month, DAY(user.birthday) AS day
FROM user WHERE
(1 =
(FLOOR(DATEDIFF(DATE_ADD(DATE(NOW()),INTERVAL
90 DAY),birthday) / 365.25)) -
(FLOOR(DATEDIFF(DATE(NOW()),birthday)
/ 365.25)))
ORDER BY MONTH(birthday),DAY(birthday)
Проблема в том, что если сейчас ноябрь, и в январе есть несколько дней рождения, то сначала будут отображаться дни рождения за январь, затем за ноябрь, а затем за декабрь, хотя дни рождения за январь уже произошли в этом году.
Есть ли способ переупорядочить эти записи в одном и том же запросе SQL, чтобы сначала отображались текущие и будущие месяцы, а затем - месяцы следующего года?
Первое частичное решение благодаря Йохану
ORDER BY ( MONTH(birthday) > MONTH(NOW()
OR ((MONTH(birthday) = MONTH(now())
AND DAY(birthday) >= DAY(NOW()) DESC
, MONTH(birthday), DAY(birthday)
Все же это требует небольшого улучшения. Если день рождения уже произошел, он должен отображаться ПОСЛЕ декабря в результатах. Пример того, что должно отображаться, если предположить, что это 27 июня
- 28 июня: Джон Доу
- 27 декабря: Мэри Райт
- 5 июня (в следующем году, конечно): безумный максимум