gpt4 book ai didi

ruby-on-rails - 使用 pluck 对关联表 ruby​​ 按计数排序

转载 作者:行者123 更新时间:2023-11-29 13:49:36 25 4
gpt4 key购买 nike

目前,我的代码如下所示:

Author.joins(:books).group("authors.id").order("count (authors.id) desc")

按作者写了多少本书排序。但是,books 是一个非常大的数据库表。因此,为了在不必使用 .joins 的情况下加快速度,如何编写可以与 .pluck 语句一起使用的内容来获取 books.id,例如:

Author.order("count (id: Book.uniq.pluck(:author_id)) desc")

(此代码引发语法错误)这主要是它如何编写和格式化的问题吗?或者,是否有更好的方法来重构此类语句?

最佳答案

您可以阅读有关 ORDER BY the IN value list 的问题.唯一可用的选项,没有加入也没有创建额外的 Postgres 函数,是这样使用顺序:

ORDER BY  id=1 DESC, id=3 DESC, id=2 DESC, id=4 DESC

您可以在 Rails 中构建这样的查询:

ids = Book.group(:author_id).order("COUNT(*) DESC").pluck(:author_id)

order_by = ids.map { |id| "id=#{id} DESC" }.join(", ")

Author.order(order_by)

这会起作用。虽然如果 Author 表包含很多记录,最好使用 counter_cache column (由@tegon 推荐)出于性能原因。

关于ruby-on-rails - 使用 pluck 对关联表 ruby​​ 按计数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43263163/

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