如何将MySQL查询结果转为对象数组作为另一查询单列输出

直接在MySQL中用内置函数拼接即可,不需要应用层额外处理,根据你的MySQL版本选对应写法即可。
方法1:MySQL 5.7及以上版本(支持JSON函数,推荐)
用内置JSON聚合函数生成标准结构,如果你需要严格匹配单引号格式,加个替换函数即可。
- 输出标准JSON格式(双引号,绝大多数程序解析场景完全兼容):
-- 把下方的表名、字段名替换成你实际业务的字段即可 SELECT JSON_ARRAYAGG( JSON_OBJECT( 'ID', ID, 'OrderId', OrderId, 'TimesTamp', DATE_FORMAT(TimesTamp, '%Y-%m-%d') ) ) AS target_array FROM 你的原表名 -- 此处可加WHERE等筛选条件
输出示例:[{"ID":437, "OrderId":255, "TimesTamp":"2021-12-15"},{"ID":438, "OrderId":255, "TimesTamp":"2021-12-15"}]
- 严格输出你要求的单引号格式:
SELECT REPLACE( JSON_ARRAYAGG( JSON_OBJECT( 'ID', ID, 'OrderId', OrderId, 'TimesTamp', DATE_FORMAT(TimesTamp, '%Y-%m-%d') ) ), '"', "'" ) AS target_array FROM 你的原表名 -- 此处可加WHERE等筛选条件
输出示例完全匹配你的要求:[{'ID':437, 'OrderId':255, 'TimesTamp':'2021-12-15'},{'ID':438, 'OrderId':255, 'TimesTamp':'2021-12-15'},...]
方法2:MySQL 5.6及以下低版本(无JSON函数)
用字符串拼接函数实现:
SELECT CONCAT( '[', GROUP_CONCAT( CONCAT( "{'ID':", ID, ", 'OrderId':", OrderId, ", 'TimesTamp':'", DATE_FORMAT(TimesTamp, '%Y-%m-%d'), "'}" ) SEPARATOR ',' ), ']' ) AS target_array FROM 你的原表名 -- 此处可加WHERE等筛选条件
注意:
GROUP_CONCAT默认最大长度为1024字节,结果集较大时会被截断,执行拼接前先运行下面的命令调大当前会话的长度限制:SET SESSION group_concat_max_len = 102400;
作为子查询嵌入其他查询的写法
直接把上面的拼接逻辑作为子查询即可,示例:
SELECT main.OrderId, ( -- 这里放上面写好的数组拼接逻辑,加好和主表的关联条件即可 SELECT REPLACE( JSON_ARRAYAGG(JSON_OBJECT( 'ID', sub.ID, 'OrderId', sub.OrderId, 'TimesTamp', DATE_FORMAT(sub.TimesTamp, '%Y-%m-%d') )), '"', "'" ) FROM 你的原表名 sub WHERE sub.OrderId = main.OrderId ) AS record_array FROM (SELECT DISTINCT OrderId FROM 你的原表名) main
内容的提问来源于stack exchange,提问作者Niranga
相关产品推荐
相关产品推荐

