Mysql 从SQL返回json对象数组
我是SQL新手,所以这可能是一个愚蠢的问题,但我很难理解返回JSON对象数组 我的代码是Mysql 从SQL返回json对象数组,mysql,sql,json,aggregate-functions,Mysql,Sql,Json,Aggregate Functions,我是SQL新手,所以这可能是一个愚蠢的问题,但我很难理解返回JSON对象数组 我的代码是 SELECT JSON_OBJECT( 'title', pc.title, 'reviews', (SELECT CAST(CONCAT('[', GROUP_CONCAT( JSON_OBJECT( 'username',r.uname,
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;
当没有审阅时,它会正确地返回一个空数组,当有一个审阅时,它会在数组中返回该审阅。但如果有多个评论,它将返回一个空数组。我遗漏了什么?不要使用CONCAT格式化JSON,而是尝试使用
我还没有测试过这个,但它应该会给你一个正确的想法。可能重复Well@JoakimDanielson,这将是使用JSON_数组函数的安全方法。。但是,如果您知道JSON结构是如何工作的,那么也可以使用CONCAT和/或GROUP_CONCAT函数生成JSON,这其实并不重要。
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