问题:
寻求利用本机 JSON 函数的 MySQL 用户可能会面临从关系数据库构建嵌套 JSON 对象的挑战。具体来说,尝试从一对多关系创建子对象会触发“子查询返回超过 1 行”错误。
解决方案:
有效生成嵌套使用 MySQL 的 JSON 对象,避免使用在父对象的输入中返回多个结果的子查询至关重要。相反,使用 GROUP_CONCAT 函数连接结果并将它们转换为 JSON 数组。
示例:
基于问题中提供的示例,以下查询将生成所需的 JSON 结构:
SELECT JSON_OBJECT( 'id', p.id, 'desc', p.`desc`, 'child_objects', ( SELECT CAST(CONCAT('[', GROUP_CONCAT(JSON_OBJECT('id', id, 'parent_id', parent_id, 'desc', `desc`)), ']') AS JSON) FROM child_table AS c WHERE c.parent_id = p.id ) ) FROM parent_table AS p;
此查询利用 CONCAT 和 GROUP_CONCAT 进行合并最终结果中所需的子对象。将连接的字符串转换为 JSON 数据类型可确保嵌套结构的正确格式。
结果:
渲染的 JSON 对象将与中指定的格式紧密一致问题:
{ "id": 1, "desc": "parent row 1", "child_objects": [ { "id": 1, "parent_id": 1, "desc": "child row 1" }, { "id": 2, "parent_id": 1, "desc": "child row 2" } ] }
附加注意:
以上是在 MySQL 中生成嵌套 JSON 对象时如何避免'子查询返回超过 1 行”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!