如何存储Birthdate和Age,以便每天可以在PHP/MySQL中更新Age?

Pro*_*irl 6 php mysql date date-of-birth

我应该如何在MySQL中存储Birthdate,以便我可以通过Cron作业轻松地每天更新每个人的年龄?

存储Age和Birthdate是否有意义,以便在涉及Age的搜索时,我不必动态计算每个Age并浪费CPU资源?

如果是这样,我应该如何1)存储出生日期,2)每天计算年龄?

我可以想象每日cron脚本首先过滤掉其出生日期不是当月的用户,然后过滤掉其出生日不是当天的用户,然后将剩下的每个用户的年龄加1.

这有意义吗?如果是这样,我该怎么做?有没有更好的方法来做所有这些?

Ben*_*Ben 14

简单的答案是不要; 从不存储人的年龄.它每年都会为每个人而变化,但正如您所说,您必须每天检查每个人是否正确.

仅存储出生日期,然后从数据库中选择时计算年龄.它today - date of birth只需几乎没有CPU.

编辑:

为了扩展我在ManseUK答案中的评论,还有失败的可能性.如果您的服务器/数据库关闭会发生什么?或者您的更新无法在指定时间运行?或者有人出现并在该日期运行更新后手动运行它?或者有人关闭你的日程安排?如果您Age从数据库中选择进行计算,则不存在发生这种情况的危险.

要选择年龄介于25到30年之间并假设DATE列,dateofbirth您的查询将类似于:

select *
  from users
 where dateofbirth between date_add( curdate(), interval -30 year )
                       and date_add( curdate(), interval -25 year )
Run Code Online (Sandbox Code Playgroud)

确保users已编入索引dateofbirth.