Activerecord 似乎忽略了我在链式 AR 查询中的第二个 order
。
我想要做的是检索前 25 篇得分最高(例如用户评分)的文章中阅读最多的文章。
Article
包含我排序的 read_count
(整数)和 score
(浮点)列。
我的(幼稚的?)尝试是这个查询:
Article.order("score DESC").limit(25).order("read_count DESC").limit(5)
返回的只是前 5 篇得分最高的文章,而不是前 25 篇得分最高的文章中阅读最多的 5 篇文章。
我可以在单个查询中执行此操作吗?感谢您的帮助!
(我在 Rails 3.2 和 Postgres 9.2 上)
附录
感谢 brad 和 Philip Hallstrom 提供的两个解决方案。两者都可以接受,尽管我在评论他的回答时解释了布拉德的纯数据库解决方案。
在我的本地开发机器 (MBA) 上分析每个查询显示子查询解决方案比 Ruby 循环解决方案快 33%。在我的生产机器(Heroku + Crane 生产数据库)上分析查询显示子查询解决方案 快 95%! (这是一个包含 40,000 篇文章的数据库)。
虽然实际花费的时间非常微不足道,但速度提高 95% 和代码行数减少 50% 是一个很好的决定因素。
Ruby-loop solution: (Philip)
dev: 24 msec
prod: 16 msec
Sub-query solution: (brad)
dev: 22 msec
prod: 0.9 msec
感谢 Philip 和 brad 的回答!
最佳答案
只是在没有测试的情况下把它放在那里,但是用子查询来做怎么样?
Article.where(id: Article.order("score DESC").limit(25)).order("read_count DESC").limit(5)
关于ruby-on-rails - 在 Rails activerecord 查询上链接一个额外的订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20014292/