mysql - 是否有更有效的方法根据每个记录有多少关联来对数组进行排序?

标签 mysql sql ruby-on-rails ruby database

我有一个模型Item,它有多个另一个模型Vote。我有一个名为 vote_countItem 方法:

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/

相关文章:

php - 从数据库上的日期检查输入日期的范围

MySQL 如何使用主选择值作为子查询参数?

sql - rails : scope order question

ruby-on-rails - 如何运行文件夹种子中的所有文件?

sql - 如何一步步在rails中查询SQL?

javascript - 记录器.调试;输出 NULL 响应

mysql - Rails Active Record 查询工作日总离开数

sql - BigQuery - SQL 日期函数,跨年按月分组

sql - 如何在不使用限制的情况下从表中获取第 n 行位置?

sql - 每个子类的表与 hibernate 中每个具体类的表?