如何显示即将到来的生日?

时间:2014-03-25 18:25:57

标签: php mysql sql date-of-birth

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

我有一个具有以下结构的数据库:

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)";

感谢您的帮助!

2 个答案:

答案 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