Có thể là không hiệu quả cao, nhưng không cần bất kỳ chức năng nào do người dùng xác định:
SELECT GROUP_CONCAT(LETTER SEPARATOR '') AS ReOrderedLetters
FROM ( SELECT 'A' as LETTER FROM <table> WHERE UPPER(`name`) like '%A%'
UNION ALL
SELECT 'B' as LETTER FROM <table> WHERE UPPER(`name`) like '%B%'
UNION ALL
SELECT 'C' as LETTER FROM <table> WHERE UPPER(`name`) like '%C%'
UNION ALL
SELECT 'D' as LETTER FROM <table> WHERE UPPER(`name`) like '%D%'
...
UNION ALL
SELECT 'Y' as LETTER FROM <table> WHERE UPPER(`name`) like '%Y%'
UNION ALL
SELECT 'Z' as LETTER FROM <table> WHERE UPPER(`name`) like '%Z%'
) alpha
CHỈNH SỬA
Tôi phải nghĩ ra một giải pháp thay thế tốt hơn trước khi đi ngủ, nếu không thì tôi sẽ không bao giờ ngủ được; vì vậy đây là một giải pháp thay thế sạch hơn và hiệu quả hơn nhiều.
Tôi đã tạo một bảng có tên là các chữ cái với một cột duy nhất của VARCHAR (1) được gọi là chữ cái; sau đó điền bảng đó với các chữ cái từ A đến Z
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');
sau đó:
select U.`name`,
GROUP_CONCAT(L.`letter`
ORDER BY L.`letter` ASC
SEPARATOR '') AS ReOrderedLetters
FROM `users` U
LEFT JOIN `letters` L ON POSITION(L.`letter` IN UPPER(U.`name`)) > 0
GROUP BY U.`name`