You need to enable JavaScript to run this app. 如何用WHERE按mid过滤并按handphone分组返回指定JSON?
优惠活动
大模型
产品
解决方案
定价
更多

如何用WHERE按mid过滤并按handphone分组返回指定JSON?

目标输出结构说明

当mid = 1时,按照给定示例数据,预期返回的JSON结构为:

{
  "0811111111": [
    {"Id": 1, "CouponNo": 1, "Status": 1}
  ],
  "08222222222": [
    {"Id": 2, "CouponNo": 2, "Status": 1},
    {"Id": 3, "CouponNo": 3, "Status": 1},
    {"Id": 4, "CouponNo": 4, "Status": 1}
  ],
  "08111111111": [
    {"Id": 5, "CouponNo": 5, "Status": 1}
  ]
}
实现语句

MySQL 5.7 / 8.0 版本(推荐,原生JSON支持)

直接使用内置聚合函数拼接结构,自动处理格式校验与特殊字符转义,无需手动拼接字符串:

SELECT JSON_OBJECTAGG(
  handphone,
  JSON_ARRAYAGG(
    JSON_OBJECT(
      'Id', id,
      'CouponNo', coupono,
      'Status', status
    )
  )
) AS target_json
FROM 你的业务表名
WHERE mid = 待过滤的mid值 -- 例如 mid = 1
GROUP BY handphone;
  • 替换你的业务表名为实际使用的表名称
  • 调整WHERE子句中的mid值为实际需要过滤的目标值
  • JSON输出的字段顺序与JSON_OBJECT内书写的顺序保持一致

MySQL 5.6及更早版本(无原生JSON函数兼容方案)

通过手动字符串拼接实现目标结构,需提前调整会话参数避免结果截断:

-- 调整group_concat最大长度,防止长结果被截断
SET SESSION group_concat_max_len = 102400;

SELECT CONCAT(
  '{',
  GROUP_CONCAT(
    CONCAT(
      '"', handphone, '": [',
      GROUP_CONCAT(
        CONCAT(
          '{"Id":', id,
          ',"CouponNo":', coupono,
          ',"Status":', status, '}'
        )
        SEPARATOR ','
      ),
      ']'
    )
    SEPARATOR ','
  ),
  '}'
) AS target_json
FROM 你的业务表名
WHERE mid = 待过滤的mid值
GROUP BY handphone;
  • 该方案需手动处理手机号字段内的特殊字符转义,避免出现JSON格式错误
  • 若字段存在NULL值,需通过IFNULL函数补充默认值,防止拼接结果异常

内容的提问来源于stack exchange,提问作者ariefs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 03:57:03