假设我有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)查询中只允许一个选择表达式
答案 0 :(得分:1)
目前还不清楚你的代码是什么失败了,但可能很有可能完成:
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)}