如何聚集在凤凰城/外生一个的has_many场?

问题描述 投票:1回答:2

例如说我有关系:

Posts has_many Comments

我试图做的线沿线的东西:

Post |> Repo.aggregate(:count, :comments)

然而,外生抱怨说:评论是一个虚拟的领域,因此,不能指望它。什么是解决这个的一个好办法吗?

phoenix-framework ecto
2个回答
0
投票

我假设你想为一组帖子的评论数。如果你想对所有岗位的评论数,你可以离开了where子句。

post_ids = [1, 2, 3]
Comment
|> where([c], c.post_id in ^post_ids)
|> group_by([c], c.post_id)
|> select([c], {c.post_id, count("*")})
|> Repo.all()

这将GROUP BY文章的评论,鉴于post_ids,并计算有多少是每个。它会返回一个元组列表,例如像这样

[
  {1, 10},
  {2, 3},
  {3, 5}
]

如果信息有任何意见也不会在结果集中上市。


0
投票

这是我最后的解决方案,其中link has_many clicks

  def list_links_count do

    query = 
      from l in Link,
        join: c in Click, as: :click,
        where: c.link_id == l.id,
        group_by: l.id,
        select: {l, count(l.id)}

    query |> Repo.all

  end
© www.soinside.com 2019 - 2024. All rights reserved.