我是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;
当没有评论时,它正确地返回一个空数组,而当有一个评论时,它以数组形式返回该评论。但是,如果有多个评论,它将返回一个空数组。我想念什么?
答案 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
我还没有测试过,但是它应该给您正确的想法。