gpt4 book ai didi

sql - 帮助优化 ActiveRecord 查询(投票系统)

转载 作者:数据小太阳 更新时间:2023-10-29 08:41:28 24 4
gpt4 key购买 nike

我的投票系统有两个模型:Item(id, name) 和 Vote(id, item_id, user_id)。

这是我目前的代码:

class Item < ActiveRecord::Base
has_many :votes

def self.most_popular
items = Item.all #where can I optimize here?
items.sort {|x,y| x.votes.length <=> y.votes.length}.first #so I don't need to do anything here?
end
end

这有一些问题,主要是我检索了所有项目记录,然后使用 Ruby 计算流行度。我几乎可以肯定有一个简单的解决方案,但我不能完全确定。

我更愿意收集记录并在初始查询中运行计算。这样,我可以向查询添加一个简单的 :limit => 1(或 LIMIT 1)。

任何帮助都会很棒——要么在所有 ActiveRecord 中重写,要么甚至在原始 SQl 中重写。后者实际上会让我更清楚地了解我要执行的查询的性质。

最佳答案

按项目 id 对投票进行分组,按计数排序,然后取第一个项目。在 rails 3 中的代码是:

Vote.group(:item_id).order("count(*) DESC").first.item

在 Rails 2 中,这应该可以工作:

Vote.all(:order => "count(*) DESC", :group => :item_id).first.item

关于sql - 帮助优化 ActiveRecord 查询(投票系统),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3808021/

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