[英]SQL query for finding finished records published for different time periods
因此,假设有一个博客,所有者可以在不同时间段发布其帖子,例如:
之后,该帖子应删除。
时间段在名为well的time_period
列中设置,其中具有整数值,其中0
代表1周, 1
代表2周, time_period
。
创建日期在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
方法)并检查每个记录是否满足要求
我可能会选择第二种,但我只是想知道是否存在一种有效的方法来编写这种情况的查询? 也许一些数据库功能或类似的东西?
我同意@a_horse_with_no_name。 但是,如果这不是一种选择,则您可以执行以下操作:
where created_at <= case time_period when 0 then :one_week_ago
when 1 then :two_weeks_ago
...
end
如果我这样做,那么出于我自己的理智,我将添加一个date / datetime字段来存储实际的到期时间,您可以将其与当前时间进行简单比较以查看帖子是否已过期。 这可以通过before_save回调中的time_period选项设置。
class Post
before_save :set_expiry_date
def set_expiry_date
self.expiry_date = self.calculate_expiry_date
end
def calculate_expiry_date
#logic which takes time_period and multiplies it by weeks or whatever you do
end
现在,您只需查看数据库,看看哪些帖子已过期。 把事情简单化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.