从SQL返回json对象的数组

时间:2019-04-23 16:32:26

标签: mysql sql json aggregate-functions

我是SQL的新手,所以这可能是一个愚蠢的问题,但是我在弄清楚返回JSON对象数组时遇到了麻烦。

我的代码是

SELECT JSON_OBJECT(
            'title', pc.title,
            'reviews', (SELECT CAST(CONCAT('[',
                GROUP_CONCAT(
                    JSON_OBJECT(
                        'username',r.uname,
                        'review',r.review,
                        'date', r.date_added
                    )
                )
            , ']')
            AS JSON) FROM reviews r WHERE pc.pid=r.pid)
        ) AS JSON
        FROM product_comp AS pc;

当没有评论时,它正确地返回一个空数组,而当有一个评论时,它以数组形式返回该评论。但是,如果有多个评论,它将返回一个空数组。我想念什么?

1 个答案:

答案 0 :(得分:1)

不要使用CONCAT来进行JSON格式的易于出错的工作,而应尝试使用JSON_ARRAYAGG()

SELECT JSON_OBJECT(
  'title', pc.title,
  'reviews', JSON_ARRAYAGG(
               JSON_OBJECT(
                 'username', r.uname,
                 'review', r.review,
                 'date', r.date_added
               )
             )
)
FROM product_comp AS pc
LEFT OUTER JOIN reviews AS r ON pc.pid = r.pid
GROUP BY pc.pid

我还没有测试过,但是它应该给您正确的想法。