我有一个模型Item
,它有多个另一个模型Vote
。我有一个名为 vote_count
的 Item
方法:
def vote_count
self.votes.count
end
我正在打印投票最多的 10 个项目的列表:
Item.all.sort_by(&:vote_count).reverse.first(10)
此方法有效,但速度相当慢,因为服务器必须加载数据库中的每一个投票。有谁知道更有效的方法吗?
我不能只创建一个每次创建投票时都会增加 1 的列,因为投票会在 7 天后使用 default_scope 进行软删除。
最佳答案
你能用SQL表达一下软删除的逻辑吗?
这里最好的办法是在数据库中使用 ORDER BY,通过 SQL 聚合函数对 ITEMS.ID 进行 GROUP BY 并排序...
order("sum(case when vote.created_at >= ... then 1 else 0 end)")
不知道 MySQL 语法,但它可能可以做类似的事情,而且比 Rails 方法快得多。
关于mysql - 是否有更有效的方法根据每个记录有多少关联来对数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975218/