You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL关联表的多行数据转换为单个数组列?

优化MySQL一对多关联查询的数组结果获取方案

核心解决方案(MySQL 5.7.22+)

使用MySQL原生的**JSON_ARRAYAGG()**聚合函数,它专门用于将分组内的字段值聚合为JSON数组,完美匹配你的需求:

假设表结构:

  • country:id(主键)、name
  • user:id、name、country_id(关联country.id)

查询SQL:

SELECT 
    c.id AS country_id,
    c.name AS country_name,
    JSON_ARRAYAGG(u.name) AS user_list
FROM country c
LEFT JOIN user u ON c.id = u.country_id
GROUP BY c.id, c.name;

返回的user_list字段直接是标准JSON数组格式(如["Alice","Bob"]),PHP端只需调用json_decode($row['user_list'], true)即可得到PHP数组,无需手动拆分分隔符。

兼容低版本MySQL方案(5.7.22以下)

如果无法升级MySQL,可通过GROUP_CONCAT配合字符串拼接生成合法JSON数组,同时用QUOTE()处理特殊字符避免格式错误:

SELECT 
    c.id AS country_id,
    c.name AS country_name,
    CONCAT('[', GROUP_CONCAT(QUOTE(u.name)), ']') AS user_list
FROM country c
LEFT JOIN user u ON c.id = u.country_id
GROUP BY c.id, c.name;

方案对比

  • JSON_ARRAYAGG:原生支持,自动处理特殊字符,性能更优,是首选方案
  • GROUP_CONCAT+CONCAT:兼容旧版本,需手动处理JSON格式,注意group_concat_max_len配置限制(避免过长内容被截断)

内容的提问来源于stack exchange,提问作者Jeú Casulo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:13:25