可以说我有posts
,comments
和votes
的表。
votes
表有一个direction
列,它是1,0或-1。
我想查询所有帖子以及评论的数量,以及每个帖子的votes.direction
总和。
这是否可以作为Ecto中的子查询实现,理想情况下在Post
模型上使用可组合查询?
目前我所拥有的是:
def count_comments(query) do
from p in query,
left_join: c in assoc(p, :comments),
select: {p, count(c.id)},
group_by: p.id
end
def get_score(query) do
from l in query,
left_join: v in assoc(p, :votes),
select: {p, sum(v.direction)},
group_by: p.id
end
但是当我收到此错误时,我无法撰写这两个查询:
(Ecto.Query.CompileError)查询中只允许一个select表达式
目前还不清楚你的代码是什么失败了,但它可能通过以下方式完成:
from p in Post,
left_join: c in assoc(p, :comments),
left_join: v in assoc(p, :votes),
group_by: p.id,
select: {p, count(c.id), sum(v.direction)}
Query compisition仅允许“未终止”查询,对于查询,没有select
条款(未经测试,可能在您的结构上略有不同):
with_comments =
from p in Post,
left_join: c in assoc(p, :comments),
group_by: p.id
with_score_and_comments =
from [p, c] in with_comments,
left_join: v in assoc(p, :votes),
group_by: p.id
result =
from [p, c, v] in with_score_and_comments,
select: {p, count(c.id), sum(v.direction)}