如何获取SQL结果作为对象

时间:2020-04-30 21:33:56

标签: mysql sql json join group-by

我有三个表:

Table USER 
id
name
email
Table CAMPUS
id
user_id (foreign key)
name 
Table POST
id
title
user_id (foreign key)

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

我得到的结果:

[{ 
id
username
campus name
title
... 
}]

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

[{
post_title:
post_id:
...
User: {id name... }
campus:{id name ...}

}]

这样,User和Campus会根据外键在帖子中继承。 如何使用原始SQL实现它?我应该稍后再解析吗?

1 个答案:

答案 0 :(得分: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