获得即将到来的生日Mysql和PHP

时间:2010-09-23 23:49:56

标签: php mysql

我一直在尝试使用mysql语句和php来获得即将到来的生日。问题是我见过一些解决方案,但他们使用日期字段。不幸的是,我的存储时间戳。如果生日是在1970年之后,下面的代码只会产生结果。我怎样才能得到一个查询,它将给出我即将到来的生日当月,下个月,月后等等?我怎么能让它忽略这一年呢?

    $sql_query = "
        SELECT mem_id, DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%d/%m/%Y') 
)
        FROM profiles
        WHERE
            IF ( MONTH( NOW() ) < 12,
              MONTH( DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%Y%m%d') ) = MONTH( NOW() ) + 1,
              MONTH( DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%Y%m%d') ) = 1)
        ORDER BY birthdate";

2 个答案:

答案 0 :(得分:2)

我一直在寻找这个代码,但我找不到干净/简单的查询(也适用于闰年(2月29日问题))

所以我自己做了。

以下是获取接下来x天即将到来的生日的最简单代码(此查询还会显示昨天的生日(或者您可以将其更改为过去的x天数)

SELECT name, date_of_birty FROM users WHERE 
        DATE(CONCAT(YEAR(CURDATE()), RIGHT(date_of_birty, 6)))
                BETWEEN 
                DATE_SUB(CURDATE(), INTERVAL 1 DAY)
                AND
                DATE_ADD(CURDATE(), INTERVAL 5 DAY)

答案 1 :(得分:0)

$currentMonth = date('n'); // or date('n', strtotime('+1 month')) or whatever
$query = "SELECT ... WHERE MONTH(FROM_UNIXTIME(`birthday`)) = $currentMonth";

请注意,UNIX时间戳是存储生日的可怕选择:

  • 他们无法存储1970年之前的日期(除非您使用负数,这可能无处不在)。
  • 要在数据库中查询它们,您必须转换所有条目FROM_UNIXTIME以进行比较,这非常昂贵。

您应该使用原生MySQL DATE columns来存储日期,这样您就可以存储更广泛的日期,并且查询效率更高。