我正在尝试整理一个结果集,该结果集提供按即将到来的生日排序的 5 个最接近的用户。在闰年开始之前,这非常有效。例如:
- 5 月 15 日 - 还剩 96 天
- 5 月 15 日 - 还剩 97 天
最高的结果是 1987 年的出生,最低的结果是 1988 年的出生。u_birth 存储为 yyyy-mm-dd。有没有一种简单的方法可以对这个问题进行排序而不必重写整个查询?
SELECT u_birth, IF( DAYOFYEAR( u_birth ) >= DAYOFYEAR( NOW() ),
DAYOFYEAR( u_birth ) - DAYOFYEAR( NOW() ),
DAYOFYEAR( u_birth ) - DAYOFYEAR( NOW() ) +
DAYOFYEAR( CONCAT( YEAR( NOW() ), '-12-31' ) )
)
AS distance
FROM (blog_users)
WHERE `s_agehide` = 0
ORDER BY distance ASC
LIMIT 5
此查询取自 mysql 手册并进行了修改:http: //dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#c7489