我知道我不是第一个问如何显示即将到来的生日的人。但不幸的是,所有其他的答案都没有帮助我找到如何做到这一点。
我有一个数据库,结构如下:
Id - Birthday
1 9/14/1996
2 8/27/1990
-- --
如您所见,在Birthday字段中存储了出生日期。我想展示五个即将到来的生日(包括今天的生日)。
但是我怎么做呢?我试过了,但是没有用:
$query="SELECT Id
FROM participants
WHERE DATE_ADD(STR_TO_DATE(birthday, %n/%j/%Y), INTERVAL YEAR(CURDATE())-YEAR(STR_TO_DATE(birthday, %n/%j/%Y)) YEAR)";
谢谢你的帮助!
这个问题的关键是订购东西,而不是使用where
。这可以防止在年底出现问题。
因此,逻辑是将MM-DD生日在当前日期之前或之后的所有内容放在首位,然后按日期顺序排列生日的其余部分:
select p.*
from participants
order by (case when date_format(STR_TO_DATE(birthday, %n/%j/%Y), '%m-%d') >= date_format(now(), '%m-%d')
then 0 else 1
end),
date_format(STR_TO_DATE(birthday, %n/%j/%Y), '%m-%d')
limit 5;
编辑:如果您需要转换出生日期:
select p.*
from participants
order by (case when date_format(birthdate, '%m-%d') >= date_format(now(), '%m-%d')
then 0 else 1
end),
date_format(birthdate, '%m-%d')
limit 5;
select top 5 *
from myTable
where
month(dob) >= month(now())
and day(dob) >= day(now())
order by dob asc