Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何存储生日和年龄,以便在PHP/MySQL中每天更新年龄?_Php_Mysql_Date_Date Of Birth - Fatal编程技术网

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

如何存储生日和年龄,以便在PHP/MySQL中每天更新年龄?,php,mysql,date,date-of-birth,Php,Mysql,Date,Date Of Birth,我应该如何在MySQL中存储生日,以便通过Cron作业轻松地每天更新每个人的年龄? 存储年龄和出生日期是否有意义,以便在进行涉及年龄的搜索时,我不必计算每个年龄并浪费CPU资源 如果是这样,我应该如何1)存储生日,2)计算每天的年龄 我可以想象daily cron脚本首先过滤掉生日月份不是当前月份的用户,然后过滤掉生日日期不是当前日期的用户,然后将剩下的每个用户的年龄增加1 这有意义吗?如果是的话,我会怎么做?有没有更好的方法来完成这一切?不,不要存储年龄,只需在查询中计算年龄。至于生日,我更喜

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

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

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

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


这有意义吗?如果是的话,我会怎么做?有没有更好的方法来完成这一切?

不,不要存储年龄,只需在查询中计算年龄。至于生日,我更喜欢用unix时间戳记录我的所有日期/时间(因为我不喜欢处理跨日期格式的可移植性—更改区域设置)

简单的答案是不要;永远不要把一个人的年龄储存起来。每个人每年都有变化,但正如你所说,你必须检查每个人每天的变化是否正确

仅存储出生日期,然后在从数据库中选择时计算年龄。它现在才
生日
,所以几乎不需要CPU

编辑:

在我的评论中,还有失败的可能性。如果服务器/数据库关闭,会发生什么情况?或者您的更新无法在指定的时间运行?或者有人在该日期的更新已经运行之后手动运行它?或者有人关闭了你的调度程序?如果按照从数据库中选择的方式计算年龄,则不会发生这种情况

要选择年龄介于25到30岁之间的位置,并假设有一个日期列
dateofbirth
,您的查询如下:

select *
  from users
 where dateofbirth between date_add( curdate(), interval -30 year )
                       and date_add( curdate(), interval -25 year )
确保
用户
出生日期
编制索引

存储年龄有意义吗

没有

我不必计算每个年龄的动态和浪费CPU资源

事实上,你每天的更新方法会浪费更多的“CPU资源”(你对这些资源的概念太模糊了,不值得关注)

有没有更好的方法来完成这一切

存储出生日期并计算所选时间的年龄

如果你想找出所有年龄大于25岁但小于30岁的人呢

这是一个非常简单的查询

WHERE birth_date BETWEEN date_sub(curdate(), INTERVAL 25 YEAR) 
                     AND date_sub(curdate(), INTERVAL 30 YEAR)
查询将使用索引(如果有的话),因此速度非常快,没有任何[不必要的]非规范化

我会把它们都储存起来

  • 更新年龄是快速而简单的——一个mysql查询可以每天运行,并且完成它
  • 当你有很多页面浏览量时,计算年龄是很费时的——浏览的次数远远超过了更改的次数
想象一下一个表格场景——一个有100或1000行的表格,显示一个人的年龄。。。计算起来需要多长时间


我一直认为Stackoverflow是动态计算信誉的,但是你可以在屏幕上看到,他们没有看到右侧模式中的用户对象。每次更改都会记录和更新它-我想这纯粹是因为它的查看次数远远超过更改次数

我不认为计算时代动态占用大量内存是完全正确的。 为什么不为一年中的每一天创建一个365行1行的表格日历呢。并存储与生日对应的用户ID列表。 对于每一天,只需参考当天的表格条目,并仅刷新那些选定用户的年龄。
即使用户群增加,这也会大大降低复杂性。

您尝试过查看视图吗?@mellamokb:不,我不熟悉。你能给我发个链接让我了解一下吗?:-(我一直在等待否决票…但我会坚持我的答案…直到有人说服我:-)一张显示1000行的表格需要很长时间。。。在浏览器中呈现。@YourCommonSense您的权利!!可能会的!!然后说它是一个包含10行和1000个并发用户的表。。。。你的否决票(如果是你的话?)要比因为我有不同的观点而点击否决票的人更容易接受。主持人:我没有否决(不同意不是这样做的理由)。计算退出时的年龄几乎不比
2-1
花费更多的时间,与更新相比绝对没有什么。这也是肯定的。如果更新失败(服务器关闭),则与动态计算不同,您的数据是错误的。@程序员是MySQL中检索当前日期的函数。。。我会使用
DATE
数据类型来存储日期,但如果您有数百万用户,并且希望找出所有年龄大于25岁但小于30岁的用户,该怎么办?为了进行搜索,难道不需要计算数百万用户的年龄吗?与每天更新一次然后简单地为年龄列编制索引相比,这听起来效率很低。你能澄清一下吗?谢谢。@程序员,如果你有数百万用户,那么你每天的年龄计算就会变得越来越可怕。如果您想这样做,那么就在dob上创建一个索引,并以使用该索引的方式手工创建查询
在今天-30岁和今天-25岁之间,如果使用PHP或MySQL或任何其他语言,闰年问题是相同的。…@Ben:感谢您的澄清。但是你能编辑你的帖子来解释这一部分吗:“今天才是出生日期”?请使用一个例子(与数据类型),因为我仍然试图围绕它。换句话说,我将如何存储它,以及如何存储它