繁体   English   中英

SQL查询以查找在不同时间段发布的完成记录

[英]SQL query for finding finished records published for different time periods

因此,假设有一个博客,所有者可以在不同时间段发布其帖子,例如:

  • 1周
  • 2周
  • 1个月
  • 2个月
  • 6个月

之后,该帖子应删除。

时间段在名为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM