mysql使用group_concat()连接构造json对象数组时长度受限

记录record转换为json

1. 关键字:

json_object()

group_concat()

group by

2. 分组聚合构造json数组

使用分组聚合生成JSON数组;

SELECT T.class_id,CONCAT('[',GROUP_CONCAT(T.temp),']') AS CONTENT
FROM (
	SELECT class_id, JSON_OBJECT( 
		'id', id,
		'class_id', class_id,
		'class_name', class_name,
		'stu_id', stu_id,
		'stu_name', stu_name,
		'status', status
	) as temp
	FROM tb_stu_class_rel 
) as T
GROUP BY T.class_id

查询结果:

class_id	CONTENT
-------------------------------
20210701	[{"id": 183, "status": "1", "stu_id": 20210701001, "class_id": 20210701, "stu_name": "藏锐立", "class_name": "2021七年级一班"},{"id": 184, "status": "1", "stu_id": 20210701002, "class_id": 20210701, "stu_name": "第明明", "class_name": "2021七年级一班"},{"id": 185, "status": "1", "stu_id": 20210701003, "class_id": 20210701, "stu_name": "奚香彤", "class_name": "2021七年级一班"},{"id": 186, "status": "1", "stu_id": 20210701004, "class_id": 20210701, "stu_name": "罗荏", "class_name": "2021七年级一班"},{"id": 187, "status": "1", "stu_id": 20210701005, "class_id": 20210701, "stu_name": "汝曦晨", "class_name": "2021七年级一班"},{"id": 188, "status": "1", "stu_id": 20210701006, "class_id": 20210701, "stu_name": "悉雅静", "class_name": "2021七年级一班"},{"id": 189, "status": "1", "stu_id": 20210701007, "class_id": 20210701, "stu_name": "花锦程", "class_name": "2021七年级一班"},{"id": 190, "status": "1", "stu_id": 20210701008, "class_id": 20210701, "stu_name": "虎]

结果数据转为了json数组,但是发现并不完整,超过1024个字符外的被截掉了;

因为group_concat长度默认设置为1024,这需要要修改数据库设置:

# 两种方式:(长度最大值:32位:4294967295(2^32 - 1), 64位:18446744073709551615(2^64 - 1)
# 1、修改mysql配置文件,添加 group_concat_max_len = 102400,然后重启mysql
# 2、使用SQL语句直接修改:(缺点:重启mysql后失效)
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;

group_concat官方资料:

https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_group-concat

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_group_concat_max_len

在这里插入图片描述
结果:

class_id	CONTENT
-------------------------------
20210701	[{"id": 183, "status": "1", "stu_id": 20210701001, "class_id": 20210701, "stu_name": "藏锐立", "class_name": "2021七年级一班"},{"id": 184, "status": "1", "stu_id": 20210701002, "class_id": 20210701, "stu_name": "第明明", "class_name": "2021七年级一班"},{"id": 185, "status": "1", "stu_id": 20210701003, "class_id": 20210701, "stu_name": "奚香彤", "class_name": "2021七年级一班"},{"id": 186, "status": "1", "stu_id": 20210701004, "class_id": 20210701, "stu_name": "罗荏", "class_name": "2021七年级一班"},{"id": 187, "status": "1", "stu_id": 20210701005, "class_id": 20210701, "stu_name": "汝曦晨", "class_name": "2021七年级一班"},{"id": 188, "status": "1", "stu_id": 20210701006, "class_id": 20210701, "stu_name": "悉雅静", "class_name": "2021七年级一班"},{"id": 189, "status": "1", "stu_id": 20210701007, "class_id": 20210701, "stu_name": "花锦程", "class_name": "2021七年级一班"},{"id": 190, "status": "1", "stu_id": 20210701008, "class_id": 20210701, "stu_name": "虎痴梅", "class_name": "2021七年级一班"},{"id": 191, "status": "1", "stu_id": 20210701009, "class_id": 20210701, "stu_name": "钞琼思", "class_name": "2021七年级一班"},{"id": 192, "status": "1", "stu_id": 20210701010, "class_id": 20210701, "stu_name": "但康盛", "class_name": "2021七年级一班"},{"id": 193, "status": "1", "stu_id": 20210701011, "class_id": 20210701, "stu_name": "亓官语燕", "class_name": "2021七年级一班"},{"id": 194, "status": "1", "stu_id": 20210701012, "class_id": 20210701, "stu_name": "别青曼", "class_name": "2021七年级一班"},{"id": 195, "status": "1", "stu_id": 20210701013, "class_id": 20210701, "stu_name": "茅泽洋", "class_name": "2021七年级一班"},{"id": 196, "status": "1", "stu_id": 20210701014, "class_id": 20210701, "stu_name": "止诗珊", "class_name": "2021七年级一班"},{"id": 197, "status": "1", "stu_id": 20210701015, "class_id": 20210701, "stu_name": "干唱月", "class_name": "2021七年级一班"},{"id": 198, "status": "1", "stu_id": 20210701016, "class_id": 20210701, "stu_name": "仇夜春", "class_name": "2021七年级一班"},{"id": 199, "status": "1", "stu_id": 20210701017, "class_id": 20210701, "stu_name": "说颖馨", "class_name": "2021七年级一班"},{"id": 200, "status": "1", "stu_id": 20210701018, "class_id": 20210701, "stu_name": "睦运浩", "class_name": "2021七年级一班"},{"id": 201, "status": "1", "stu_id": 20210701019, "class_id": 20210701, "stu_name": "温平松", "class_name": "2021七年级一班"},{"id": 202, "status": "1", "stu_id": 20210701020, "class_id": 20210701, "stu_name": "图门俊民", "class_name": "2021七年级一班"},{"id": 203, "status": "1", "stu_id": 20210701021, "class_id": 20210701, "stu_name": "捷清秋", "class_name": "2021七年级一班"},{"id": 204, "status": "1", "stu_id": 20210701022, "class_id": 20210701, "stu_name": "殳鹏池", "class_name": "2021七年级一班"},{"id": 205, "status": "1", "stu_id": 20210701023, "class_id": 20210701, "stu_name": "夕建茗", "class_name": "2021七年级一班"},{"id": 206, "status": "1", "stu_id": 20210701024, "class_id": 20210701, "stu_name": "亓凌波", "class_name": "2021七年级一班"},{"id": 207, "status": "1", "stu_id": 20210701025, "class_id": 20210701, "stu_name": "初绿蝶", "class_name": "2021七年级一班"},{"id": 208, "status": "1", "stu_id": 20210701026, "class_id": 20210701, "stu_name": "潮昊苍", "class_name": "2021七年级一班"},{"id": 209, "status": "1", "stu_id": 20210701027, "class_id": 20210701, "stu_name": "柯翰学", "class_name": "2021七年级一班"},{"id": 210, "status": "1", "stu_id": 20210701028, "class_id": 20210701, "stu_name": "苑平彤", "class_name": "2021七年级一班"},{"id": 211, "status": "1", "stu_id": 20210701029, "class_id": 20210701, "stu_name": "史乐成", "class_name": "2021七年级一班"},{"id": 212, "status": "1", "stu_id": 20210701030, "class_id": 20210701, "stu_name": "丛霞赩", "class_name": "2021七年级一班"},{"id": 213, "status": "1", "stu_id": 20210701031, "class_id": 20210701, "stu_name": "典三春", "class_name": "2021七年级一班"},{"id": 214, "status": "1", "stu_id": 20210701032, "class_id": 20210701, "stu_name": "费婉静", "class_name": "2021七年级一班"},{"id": 215, "status": "1", "stu_id": 20210701033, "class_id": 20210701, "stu_name": "旁兴思", "class_name": "2021七年级一班"},{"id": 216, "status": "1", "stu_id": 20210701034, "class_id": 20210701, "stu_name": "夏雨旋", "class_name": "2021七年级一班"},{"id": 217, "status": "1", "stu_id": 20210701035, "class_id": 20210701, "stu_name": "宁又亦", "class_name": "2021七年级一班"},{"id": 218, "status": "1", "stu_id": 20210701036, "class_id": 20210701, "stu_name": "洛妙", "class_name": "2021七年级一班"},{"id": 219, "status": "1", "stu_id": 20210701037, "class_id": 20210701, "stu_name": "频晨轩", "class_name": "2021七年级一班"},{"id": 220, "status": "1", "stu_id": 20210701038, "class_id": 20210701, "stu_name": "革和怡", "class_name": "2021七年级一班"},{"id": 221, "status": "1", "stu_id": 20210701039, "class_id": 20210701, "stu_name": "敏奇水", "class_name": "2021七年级一班"},{"id": 222, "status": "1", "stu_id": 20210701040, "class_id": 20210701, "stu_name": "淡雪晴", "class_name": "2021七年级一班"},{"id": 223, "status": "1", "stu_id": 20210701041, "class_id": 20210701, "stu_name": "修凝静", "class_name": "2021七年级一班"},{"id": 224, "status": "1", "stu_id": 20210701042, "class_id": 20210701, "stu_name": "嵇恨", "class_name": "2021七年级一班"},{"id": 225, "status": "1", "stu_id": 20210701043, "class_id": 20210701, "stu_name": "疏涵润", "class_name": "2021七年级一班"},{"id": 226, "status": "1", "stu_id": 20210701044, "class_id": 20210701, "stu_name": "展宏恺", "class_name": "2021七年级一班"},{"id": 227, "status": "1", "stu_id": 20210701045, "class_id": 20210701, "stu_name": "惠嘉勋", "class_name": "2021七年级一班"},{"id": 228, "status": "1", "stu_id": 20210701046, "class_id": 20210701, "stu_name": "池新晴", "class_name": "2021七年级一班"},{"id": 229, "status": "1", "stu_id": 20210701047, "class_id": 20210701, "stu_name": "候乐荷", "class_name": "2021七年级一班"},{"id": 230, "status": "1", "stu_id": 20210701048, "class_id": 20210701, "stu_name": "佴佁然", "class_name": "2021七年级一班"},{"id": 231, "status": "1", "stu_id": 20210701049, "class_id": 20210701, "stu_name": "书雅逸", "class_name": "2021七年级一班"},{"id": 232, "status": "1", "stu_id": 20210701050, "class_id": 20210701, "stu_name": "纪皎", "class_name": "2021七年级一班"},{"id": 233, "status": "1", "stu_id": 20210701051, "class_id": 20210701, "stu_name": "慈梅风", "class_name": "2021七年级一班"},{"id": 234, "status": "1", "stu_id": 20210701052, "class_id": 20210701, "stu_name": "潭令燕", "class_name": "2021七年级一班"},{"id": 235, "status": "1", "stu_id": 20210701053, "class_id": 20210701, "stu_name": "丑蔓菁", "class_name": "2021七年级一班"},{"id": 236, "status": "1", "stu_id": 20210701054, "class_id": 20210701, "stu_name": "黎禄", "class_name": "2021七年级一班"},{"id": 237, "status": "1", "stu_id": 20210701055, "class_id": 20210701, "stu_name": "钟离良畴", "class_name": "2021七年级一班"},{"id": 238, "status": "1", "stu_id": 20210701056, "class_id": 20210701, "stu_name": "奈娟丽", "class_name": "2021七年级一班"},{"id": 239, "status": "1", "stu_id": 20210701057, "class_id": 20210701, "stu_name": "赫依波", "class_name": "2021七年级一班"},{"id": 240, "status": "1", "stu_id": 20210701058, "class_id": 20210701, "stu_name": "秦天元", "class_name": "2021七年级一班"},{"id": 241, "status": "1", "stu_id": 20210701059, "class_id": 20210701, "stu_name": "板羽彤", "class_name": "2021七年级一班"},{"id": 242, "status": "1", "stu_id": 20210701060, "class_id": 20210701, "stu_name": "顿幼枫", "class_name": "2021七年级一班"}]

另,参考官方例子,还可以对结果去重、排序和指定分隔符(默认分隔符使用’,’);

SELECT student_name,GROUP_CONCAT(
    DISTINCT test_score 
    ORDER BY test_score 
    DESC SEPARATOR ' '
)
FROM student
GROUP BY student_name;

测试数据:

INSERT INTO tb_stu_class_rel 
(id, class_id, class_name, stu_id, stu_name, status) 
VALUES
(null,20210701, '2021七年级一班', 20210701001, '藏锐立', '1'),
(null,20210701, '2021七年级一班', 20210701002, '第明明', '1'),
(null,20210701, '2021七年级一班', 20210701003, '奚香彤', '1'),
(null,20210701, '2021七年级一班', 20210701004, '罗荏', '1'),
(null,20210701, '2021七年级一班', 20210701005, '汝曦晨', '1'),
(null,20210701, '2021七年级一班', 20210701006, '悉雅静', '1'),
(null,20210701, '2021七年级一班', 20210701007, '花锦程', '1'),
(null,20210701, '2021七年级一班', 20210701008, '虎痴梅', '1'),
(null,20210701, '2021七年级一班', 20210701009, '钞琼思', '1'),
(null,20210701, '2021七年级一班', 20210701010, '但康盛', '1'),
(null,20210701, '2021七年级一班', 20210701011, '亓官语燕', '1'),
(null,20210701, '2021七年级一班', 20210701012, '别青曼', '1'),
(null,20210701, '2021七年级一班', 20210701013, '茅泽洋', '1'),
(null,20210701, '2021七年级一班', 20210701014, '止诗珊', '1'),
(null,20210701, '2021七年级一班', 20210701015, '干唱月', '1'),
(null,20210701, '2021七年级一班', 20210701016, '仇夜春', '1'),
(null,20210701, '2021七年级一班', 20210701017, '说颖馨', '1'),
(null,20210701, '2021七年级一班', 20210701018, '睦运浩', '1'),
(null,20210701, '2021七年级一班', 20210701019, '温平松', '1'),
(null,20210701, '2021七年级一班', 20210701020, '图门俊民', '1'),
(null,20210701, '2021七年级一班', 20210701021, '捷清秋', '1'),
(null,20210701, '2021七年级一班', 20210701022, '殳鹏池', '1'),
(null,20210701, '2021七年级一班', 20210701023, '夕建茗', '1'),
(null,20210701, '2021七年级一班', 20210701024, '亓凌波', '1'),
(null,20210701, '2021七年级一班', 20210701025, '初绿蝶', '1'),
(null,20210701, '2021七年级一班', 20210701026, '潮昊苍', '1'),
(null,20210701, '2021七年级一班', 20210701027, '柯翰学', '1'),
(null,20210701, '2021七年级一班', 20210701028, '苑平彤', '1'),
(null,20210701, '2021七年级一班', 20210701029, '史乐成', '1'),
(null,20210701, '2021七年级一班', 20210701030, '丛霞赩', '1'),
(null,20210701, '2021七年级一班', 20210701031, '典三春', '1'),
(null,20210701, '2021七年级一班', 20210701032, '费婉静', '1'),
(null,20210701, '2021七年级一班', 20210701033, '旁兴思', '1'),
(null,20210701, '2021七年级一班', 20210701034, '夏雨旋', '1'),
(null,20210701, '2021七年级一班', 20210701035, '宁又亦', '1'),
(null,20210701, '2021七年级一班', 20210701036, '洛妙', '1'),
(null,20210701, '2021七年级一班', 20210701037, '频晨轩', '1'),
(null,20210701, '2021七年级一班', 20210701038, '革和怡', '1'),
(null,20210701, '2021七年级一班', 20210701039, '敏奇水', '1'),
(null,20210701, '2021七年级一班', 20210701040, '淡雪晴', '1'),
(null,20210701, '2021七年级一班', 20210701041, '修凝静', '1'),
(null,20210701, '2021七年级一班', 20210701042, '嵇恨', '1'),
(null,20210701, '2021七年级一班', 20210701043, '疏涵润', '1'),
(null,20210701, '2021七年级一班', 20210701044, '展宏恺', '1'),
(null,20210701, '2021七年级一班', 20210701045, '惠嘉勋', '1'),
(null,20210701, '2021七年级一班', 20210701046, '池新晴', '1'),
(null,20210701, '2021七年级一班', 20210701047, '候乐荷', '1'),
(null,20210701, '2021七年级一班', 20210701048, '佴佁然', '1'),
(null,20210701, '2021七年级一班', 20210701049, '书雅逸', '1'),
(null,20210701, '2021七年级一班', 20210701050, '纪皎', '1'),
(null,20210701, '2021七年级一班', 20210701051, '慈梅风', '1'),
(null,20210701, '2021七年级一班', 20210701052, '潭令燕', '1'),
(null,20210701, '2021七年级一班', 20210701053, '丑蔓菁', '1'),
(null,20210701, '2021七年级一班', 20210701054, '黎禄', '1'),
(null,20210701, '2021七年级一班', 20210701055, '钟离良畴', '1'),
(null,20210701, '2021七年级一班', 20210701056, '奈娟丽', '1'),
(null,20210701, '2021七年级一班', 20210701057, '赫依波', '1'),
(null,20210701, '2021七年级一班', 20210701058, '秦天元', '1'),
(null,20210701, '2021七年级一班', 20210701059, '板羽彤', '1'),
(null,20210701, '2021七年级一班', 20210701060, '顿幼枫', '1')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.7 版本及以后,提供了对 JSON 数据类型的支持。MySQL 内置了一些处理 JSON 数据的函数,可以方便地查询和操作 JSON 数据。 要解析 JSON 数组,可以使用 `JSON_EXTRACT()` 函数和 MySQL 提供的 JSON 路径表达式,具体操作步骤如下: 1. 创建一个表,包含一个 JSON 类型的字段: ```sql CREATE TABLE test_json ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `data` JSON NOT NULL ); ``` 2. 插入一些数据,包含一个 JSON 数组: ```sql INSERT INTO test_json (`data`) VALUES ('["apple", "banana", "cherry"]'), ('["orange", "pear", "pineapple"]'); ``` 3. 使用 `JSON_EXTRACT()` 函数解析 JSON 数组,返回指定位置的元素: ```sql SELECT JSON_EXTRACT(`data`, '$[0]') AS `first_element` FROM test_json; ``` 输出结果为: ``` +---------------+ | first_element | +---------------+ | "apple" | | "orange" | +---------------+ ``` 上述 SQL 语句中,`JSON_EXTRACT()` 函数的第一个参数是 JSON 类型的字段,第二个参数是 JSON 路径表达式,`$[0]` 表示取 JSON 数组中的第一个元素。 4. 可以使用 `JSON_LENGTH()` 函数获取 JSON 数组的长度,然后使用 `JSON_EXTRACT()` 函数遍历数组: ```sql SELECT JSON_EXTRACT(`data`, CONCAT('$[', n, ']')) AS `element` FROM test_json JOIN (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2) AS numbers ON n < JSON_LENGTH(`data`); ``` 输出结果为: ``` +-----------+ | element | +-----------+ | "apple" | | "banana" | | "cherry" | | "orange" | | "pear" | | "pineapple"| +-----------+ ``` 上述 SQL 语句中,使用了一个子查询生成一个数字序列,然后使用 `JSON_LENGTH()` 函数获取数组长度使用 `CONCAT()` 函数和数字序列生成 JSON 路径表达式,最后使用 `JSON_EXTRACT()` 函数遍历数组。 以上就是在 MySQL 中解析 JSON 数组的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值