MySQL把多个查询结果合并JSON

一条主数据有诺干详情记录。这种场景是很常见的。有时候我们需要全部查询出来,按关联关系返回结果。

比如:每条广告发布在多个项目里,现在需要查出前10条广告所在的项目名称。

SELECT info.title,
 CONCAT('[',
  GROUP_CONCAT(
  CONCAT('{projectCode:"', gbp.projectCode, '",'),
  CONCAT('projectName:"', gbp.projectName, '"}')),
  ']') AS projectInfo FROM ghome.ghome_billboard_project AS gbp
  left join ghome.ghome_billboard_info AS info
  ON gbp.billboardId = info.billboardId
  GROUP BY gbp.billboardId
  LIMIT 10

主要是GROUP_CONCAT和CONCAT函数用法。这条sql把广告的项目信息转成json格式放在projectInfo字段。

补充(2019-03-15):

mysql的group_concat默认连接长度为1024字符,其余部分都会被截取丢掉。可以修改配置常量:

SET SESSION group_concat_max_len=102400;

或者全局:

SET GLOBAL group_concat_max_len=102400;

也可以在配置文件上加上:

group_concat_max_len = 102400;


已发布

分类

,

来自

标签:

评论

《 “MySQL把多个查询结果合并JSON” 》 有 2 条评论

  1. wangzhengzhen

    如果key值是纯数字,应该加上引号

  2. 王煜傑

    感謝您的分享。
    PS:key 須雙引號包住才是正確的 JSON 格式,否則 JavaScript JSON.parse() 會錯誤。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注