- 先利用group, group_concat将要转化的行转成字符串
- 然后用字符截取实现
- SUBSTRING_INDEX
- SUBSTRING_INDEX(‘要截取的字符串’ , ‘分隔符’ , ‘计数’)
- CHAR_LENGTH 字符长度
- SUBSTRING(‘要截取的字符串’ , ‘截取开始位置’ )
-- 创建一个字符串截取处理函数
CREATE FUNCTION SPLIT_STR(x VARCHAR(255),delim VARCHAR(12),pos INT)
RETURNS VARCHAR(255)
RETURN SUBSTRING(SUBSTRING_INDEX(x, delim, pos), CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 2);
-- 具体查询
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(heroname), ',', 1) hero1,
SPLIT_STR(GROUP_CONCAT(heroname), ',', 2) hero2,
SPLIT_STR(GROUP_CONCAT(heroname), ',', 3) hero3,
SPLIT_STR(GROUP_CONCAT(heroname), ',', 4) hero4,
SPLIT_STR(GROUP_CONCAT(heroname), ',', 5) hero5,
SPLIT_STR(GROUP_CONCAT(heroname), ',', 6) hero6
FROM hero
GROUP BY matchid
比如 GROUP_CONCAT(heroname) 结果为 '劫,阿木木,努努,阿卡丽,艾希,盖伦'
那么
SUBSTRING_INDEX(GROUP_CONCAT(heroname), ',', 1)的结果是 劫
SUBSTRING_INDEX(GROUP_CONCAT(heroname), ',', 2)的结果是 劫,阿木木
SUBSTRING_INDEX(GROUP_CONCAT(heroname), ',', 3)的结果是 劫,阿木木,努努
SPLIT_STR(GROUP_CONCAT(heroname), ',', 3) 就是相当于
SUBSTRING('劫,阿木木,努努' , CHAR_LENGTH('劫,阿木木')+2)
SUBSTRING('劫,阿木木,努努' , 7) 结果就是 努努