使用Active Record,如何按2列(created_at,views)排序:
1st:过去3天内创建的记录
第二:之后的所有内容都应该仅通过观看次序
为了获得与此类似的结果(请忽略日期语法):
[[2017-02-15 00:00:00 UTC, 150]],
[2017-02-14 00:00:00 UTC, 88],
[2017-02-13 00:00:00 UTC, 12]],
[2016-01-14 00:00:00 UTC, 99999]],
[2016-03-10 00:00:00 UTC, 3000]],
[2016-11-07 00:00:00 UTC, 2000]],
[2016-10-21 00:00:00 UTC, 1000]],
[2016-09-03 00:00:00 UTC, 100]],
[2016-05-18 00:00:00 UTC, 10]]
我发现" date_trunc"在Postgresql但我只需要过去3天,然后只考虑一下观看次数。
我有哪些选项,理想情况下只使用一个查询?
由于
答案 0 :(得分:2)
这是一个答案,可能不是单个查询。但是,它符合您的要求。
我以User
模型为例。
首先,获取创建日期为过去3天的用户。
users = User.where(:created_at => (Date.today - 3.days)..Date.today)
现在,获取创建日期不是最近3天的用户,按视图DESC排序
users2 = (User.where.not(:created_at => (Date.today - 3.days)..Date.today)).order('views desc')
现在,使用 (+)
Rails Active Record对象可以使用(+)
users3 = users + users2
会显示您的结果。
答案 1 :(得分:0)
您可以在当前日期和当前日期之间创建日期 - 3.days。在这里,您将获得从过去3天创建的所有记录。
current_date = Time.zone.now
before_date = current_date - 3.days
Ex: where(:created_at => before_date.beginning_of_day.. current_date.end_of_day).order(created_at ASC, views DESC)