ruby-on-rails - 在 Rails activerecord 查询上链接一个额外的订单?

标签 ruby-on-rails postgresql ruby-on-rails-3.2 rails-activerecord

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/

相关文章:

ruby-on-rails - Ruby:ElasticSearch + 轮胎错误 Tire::Search::SearchRequestFailed - IndexMissingException?

ruby-on-rails - 在 Ruby on Rails 中放置模型 "utility"函数的位置

postgresql - 如何将数据库从 Odoo 9 迁移到 Odoo 11?

android - 改造 @Body 在 HTTP 请求中显示为参数

ruby-on-rails - 一个名为 "type"的模型属性会自动插入到 ActiveModel::MassAssignmentSecurity::BlackList 中

linux - PostgreSQL 数据库备份为空 - 出了什么问题?

带有 WHERE 子句的 SQL LIMIT

jquery - 如果 Rails 中的 text_field_tag 表单助手被禁用,它不会提交吗?

ruby-on-rails - Rails 3 操作邮件程序制作 OpenSSL::SSL::SSLError: 主机名与服务器证书不匹配

ruby-on-rails - Ruby 1.8.7 的段错误