【问题标题】:how to get sql result as objects如何将sql结果作为对象获取
【发布时间】:2020-08-15 09:21:39
【问题描述】:

我有三张桌子:

表用户
ID
姓名
电子邮件
表校园
ID
user_id(外键)
名称
表 POST ID 标题 user_id(外键)

一个用户属于一个校园,一个帖子属于一个用户。我想写一个查询来获取帖子内部联接与用户内部联接与校园。

我得到的结果:

[{ ID 用户名 校园名称 标题 ... }]

一切都在一个对象中。相反,我想要这样的嵌套对象:

[{ 帖子标题: post_id: ... 用户:{id 名称...} 校园:{id name ...} }]

这样,User和Campus是根据外键在post中继承的。 如何使用原始 sql 实现它?我应该稍后解析它吗?

【问题讨论】:

标签: mysql sql json join group-by


【解决方案1】:

您可以使用 join 和使用 json 函数来生成您期望的结果。

您的问题关于表结构不是很准确,但应该如下所示:

select 
    json_object(
        'id',     p.id
        'title',  p.title
        'user',   json_object('id', u.id, 'name', u.name),
        'campus', json_object('id', c.id, 'name', c.name)
    ) post_object
from posts p
inner join users u on u.id = p.user_id
inner join campus c on c.user_id = u.id

这为您提供了一个结果集,其中每个帖子包含一列和一条记录作为 json 对象,其中包含代表用户和校园的嵌套对象。

如果您想要一个包含单行且所有行都填充在 json 数组中的结果,您可以在此之上使用 json_arrayagg()

select json_arrayagg(
    json_object(
        'id',     p.id
        'title',  p.title
        'user',   json_object('id', u.id, 'name', u.name),
        'campus', json_object('id', c.id, 'name', c.name)
    ) 
) all_posts_objects
from posts p
inner join users u on u.id = p.user_id
inner join campus c on c.user_id = u.id

【讨论】:

  • 谢谢老兄,我以前不知道 sql 中的 json 对象,我认为这会起作用。再次感谢
猜你喜欢
  • 1970-01-01
  • 2015-05-05
  • 2018-08-06
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多