我知道我不是第一个询问如何展示即将到来的生日的人。但不幸的是,所有其他答案都没有帮助我找到如何做到这一点。
我有一个具有以下结构的数据库:
Id - Birthday
1 9/14/1996
2 8/27/1990
-- --
如您所见,在生日字段中存储了出生日期。我想展示五个即将到来的生日(包括今天的生日)。
但我怎么能这样做?我试过这个,但它不起作用:
$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)";
感谢您的帮助!
答案 0 :(得分:4)
这个问题的关键是订购东西,而不是使用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;
答案 1 :(得分:1)
select top 5 *
from myTable
where
month(dob) >= month(now())
and day(dob) >= day(now())
order by dob asc