【问题标题】:Query for Joining Multiple Associations查询加入多个关联
【发布时间】:2013-09-04 11:19:12
【问题描述】:

我设法使用连接表进行查询。我想知道如何添加另一个联接表(例如,publication_cmets),计算有多少 cmets 出版物将 publication_cmets_count 与 reviews_count 相加按 DESC 顺序排列。

我已经阅读了 rails 指南和许多关于 stackoverflow 的示例,但是仍然需要有人来协助处理语法以及我应该如何将所有部分集中在一个地方。谢谢。

@publication = Publication.all(
                          joins: :reviews,
                          select: '"publications".*, count("reviews".id) as reviews_count', 
                          group: '"publications".id',
                          order: "reviews_count DESC")

【问题讨论】:

  • 我建议您一次一步,例如,首先检索所有这些,然后尝试进行连接、计数等。另一件事是,如果您使用的是@ 987654322@ 使用新语法,不要使用findselectgrouporder 等。
  • 我使用 Rails 3.2。你能发布答案吗?!

标签: sql ruby-on-rails ruby ruby-on-rails-3 controller


【解决方案1】:

ActiveRecord 允许您只向 joins 方法提供一个字符串。所以你可以只写原始的 SQL 连接条件:

Publication.select("..., COUNT(publication_comments.id) as pub_count")
 .join('JOIN reviews on (..) JOIN publication_comments')
 .group('publications.id'

【讨论】:

  • 最重要的是我想知道我如何在查询中对 reviews_count 和 pub_count 求和?我会使用 sum 方法还是只是加上它们(以某种方式)并进行 DESC 排序?
  • 实际上要查看您不想对它们求和而是对它们进行计数的评论数量(如我上面的示例) - 这样您就可以获得评论数量,而不是他们的 ID 的总和值。
  • 有问题我也使用 count !但是我问如何使reviews_count + pub_count = sum?我将按顺序使用这个总和:“sum DESC”
猜你喜欢
  • 1970-01-01
  • 2021-10-11
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 2011-03-20
相关资源
最近更新 更多