小编典典

如何存储生日和年龄,以便可以每天在PHP / MySQL中更新年龄?

mysql

我应该如何在MySQL中存储出生日期,以便可以通过Cron Job轻松地每天更新每个人的年龄?

存储“年龄”和“生日”是否有意义,以便在进行涉及“年龄”的搜索时,我不必即时计算每个“年龄”并浪费CPU资源?

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

我可以想象每天的cron脚本会首先过滤出其生日不是当前月份的用户,然后过滤出其生日不是当前日期的用户,然后将每个剩余用户的年龄增加一个。

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


阅读 1053

收藏
2020-05-17

共1个答案

小编典典

简单的答案是:不要。永远不要存储一个人的年龄。它每年针对每个人而变化,但是,正如您所说,您必须每天检查每个人的正确性。

仅存储出生日期,然后从数据库中选择时计算年龄。只有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 )

确保users在上建立索引dateofbirth

2020-05-17