【发布时间】:2015-04-10 07:16:44
【问题描述】:
所以假设有一个博客,并且所有者可以在不同的时间段发布他的帖子,例如:
- 1 周
- 2 周
- 1个月
- 2 个月
- 6 个月
之后应该删除帖子。
时间段设置在名为time_period的列中,其中0代表1周,1代表2周等等
创建日期设置在created_at 列中。
所以我需要编写一个 sql 查询来获取所有已过期发布日期的记录,我可以看到两种方法来解决这个问题:
1) 编写一个包含很多条件的查询,例如:
.where("(time_period = 0 AND created_at <= :one_week_ago) OR
(time_period = 1 AND created_at <= :two_weeks_ago)",
one_week_ago: Time.now - 1.week,
two_weeks_ago: Time.now - 2.weeks)
但对于所有条件
2) 或者简单地获取所有记录(使用find_each 方法)并检查每个记录是否满足要求
我可能会选择第二个,但我只是想知道是否有一种有效的方法可以针对这种情况编写查询?也许是一些数据库功能或类似的东西?
【问题讨论】:
-
如果您只在该列中存储周数,事情会更容易(即“4”代表“1个月”,“8”代表两个月,依此类推)。然后你可以做
created_at <= current_date - interval '1 week' * time_period -
是的,我应该考虑一下。谢谢你的建议
标签: sql ruby-on-rails database postgresql