gpt4 book ai didi

mysql - Ecto 查询检索所有帖子以及最新评论

转载 作者:行者123 更新时间:2023-12-03 23:39:27 27 4
gpt4 key购买 nike

注意:我使用的是 MySQL 5.7。
我有两个名为 Post、Comment 的表

  schema "posts" do
field: id, string
field :title, :string
field :slug, :string
field :active, :boolean, default: true
timestamps()
end

schema "comments" do
field: id, string
field: post_id, string
field :title, :string
field :body, :string
field :email, :string
field :meta, :map
field :active, :boolean, default: false
timestamps()
end
我正在使用 Ecto用于 Elixir 中的数据库查询.目前,我遇到了尝试获取数据库中所有帖子以及这些帖子的最新评论(如果有)的问题。例如:
Post 1 ──── post1__last_comment_id 

Post 2 ──── post2__last_comment_id

Post 3 ──── nil
我试过 join_leftpost.id == comment.id ,但这会返回与帖子相关的所有评论,而不仅仅是最近的评论。
我也试过 grouping_by comment.post_id并获得最大值 id ,虽然有效,但这不是理想的解决方案,因为它需要基于 date而不是 id的评论。
我查了查怎么做,虽然我发现原始 SQL 查询的解决方案很少,但我找不到任何与 Ecto 类似的东西,也无法弄清楚如何将它从 SQL 转换为 Ecto。
是否可以使用 Ecto 完成?

最佳答案

您可以为此使用横向连接,而 Ecto 支持这一点。
Ecto 文档中有一个示例可以处理您的用例。看这里 https://hexdocs.pm/ecto/Ecto.Query.html#preload/3
以下是文档中的示例,适用于您想要的内容。

Repo.all from p in Post, as: :post,
join: c in assoc(p, :comments),
inner_lateral_join: latest in subquery(
from Comment,
where: [post_id: parent_as(:post).id],
order_by: [{desc: :inserted_at}],
limit: 1,
select: [:id]
), on: latest.id == c.id,
preload: [comments: c]

关于mysql - Ecto 查询检索所有帖子以及最新评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66670274/

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