我应该如何在 MySQL 中存储生日,以便我可以通过 Cron 作业轻松地每天更新每个人的年龄?
存储年龄和出生日期是否有意义,以便在进行涉及年龄的搜索时,我不必即时计算每个年龄并浪费 CPU 资源?
如果是这样,我应该如何 1) 存储出生日期,2) 计算每天的年龄?
我可以想象每日 cron 脚本首先过滤掉出生日期月份不是当前月份的用户,然后过滤掉出生日期不是当前日期的用户,然后将每个用户的年龄加一向左。
这有道理吗?如果是这样,我该怎么做?有没有更好的方法来完成这一切?
最佳答案
简单的答案是不要;永远不要存储一个人的年龄。每个人的数据每年都会发生变化,但正如您所说,您必须每天检查它是否适合每个人。
只存储出生日期,然后从数据库中选择时计算年龄。只是今天 - 出生日期
,因此几乎不需要 CPU。
编辑:
扩展我在 ManseUK's answer 中的评论也有失败的可能。如果您的服务器/数据库宕机了会发生什么?或者您的更新无法在指定时间运行?或者有人在该日期运行更新后手动运行它?或者有人关闭了你的调度程序?如果您按照从数据库中选择的方式计算年龄
,则不会有发生这种情况的危险。
要选择年龄在 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
建立索引。
关于php - 如何在 PHP/MySQL 中存储生日和年龄以便年龄可以每天更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48062597/