如何显示即将到来的生日


How to display upcoming birthdays?

我知道我不是第一个问如何显示即将到来的生日的人。但不幸的是,所有其他的答案都没有帮助我找到如何做到这一点。

我有一个数据库,结构如下:

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