一、需求
-
对表中某个字段里的内容排序
-
真实场景
-
一个user表,表结构
-
表数据:
要求对name字段的内容排序,比如 AB->AB、DA->AD、CB->BC
实现效果如下图;
二、方案
- 新建一个letters表插入并插入数据
CREATE TABLE IF NOT EXISTS `letters` (
`letter` varchar(1) NOT NULL,
PRIMARY KEY (`letter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `letters` (`letter`) VALUES
('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),
('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z');
- 执行如下sql进行关联查询即可得到我们想要的结果
select U.id,U.`name`,
GROUP_CONCAT(L.`letter`
ORDER BY L.`letter` ASC
SEPARATOR '') AS ReOrderedLetters
FROM `user` U
LEFT JOIN `letters` L ON POSITION(L.`letter` IN UPPER(U.`name`)) > 0
GROUP BY U.`name`
ORDER BY U.id