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

标签 php mysql date

我应该如何在 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 )

确保usersdateofbirth建立索引。

关于php - 如何在 PHP/MySQL 中存储生日和年龄以便年龄可以每天更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48062597/

相关文章:

javascript - 提交按钮将值传递给数据库并显示值的出现(laravel)

PHP - 推送通知

PHP 联系表格邮件功能不起作用

mysql - 无法连接亚马逊MYSQL

date - Kendo 网格日期列未格式化

php - 使用 Web 浏览器在本地打开编辑器并使用 php 检索服务器上的数据?

mysql - 存储过程不存在

mysql - 如何在mysql中插入gridview?

java - 如何格式化日期

java - 如何从类型为 java.util.Date 的 JavaScript 对象返回?