gpt4 book ai didi

sql - 如何在 Rails 中创建 "Upcoming birthdays"模块?

转载 作者:可可西里 更新时间:2023-11-01 07:12:18 26 4
gpt4 key购买 nike

我有一个表“users”,其中有一列“date_of_birth”(DATE 格式,包含日、月、年)。在前端,我需要列出 5 个即将到来的生日。

花了很长时间试图找出逻辑..也浏览了谷歌中所有可能的文章,但没有运气..

有什么关于如何在 RoR 中执行此操作的建议吗?

谢谢!

最佳答案

一些答案​​建议计算/存储一年中的第几天并对其进行排序,但是当您接近年底并且需要考虑人时,仅此一项不会有多大用处明年年初生日。

我会寻求一个解决方案,计算每个人下一个生日的完整日期(年、月、日),然后对其进行排序。您可以使用 Ruby 代码或使用数据库中的存储过程来执行此操作。后者会更快,但会使您的应用程序以后更难迁移到不同的数据库平台。

每天只更新一次即将到来的生日列表是合理的,这意味着您可以使用某种形式的缓存。因此,所需的查询/代码的速度不是问题,只要您缓存结果,这样的事情应该可以正常工作:

class User
def next_birthday
year = Date.today.year
mmdd = date_of_birth.strftime('%m%d')
year += 1 if mmdd < Date.today.strftime('%m%d')
mmdd = '0301' if mmdd == '0229' && !Date.parse("#{year}0101").leap?
return Date.parse("#{year}#{mmdd}")
end
end

users = User.find(:all, :select => 'id, date_of_birth').sort_by(&:next_birthday).first(5)

编辑:已修复以正确处理闰年。

关于sql - 如何在 Rails 中创建 "Upcoming birthdays"模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com