2013-12-13 4 views
0

У меня есть таблица вроде этого ...как сортировать слова по буквам в MySQL

mytbl(names)values('ron'),('sam'),('john'),('tony') 

Теперь я хочу, чтобы увидеть слова из names колонны, где каждое слово будет сортироваться буквами в алфавитном порядке по возрастанию order.I'm пытается прояснить мои требования более конкретно ..

Я хочу, как этот

«рон» будут рассортированы как «ни»

«Сэмом» будут отсортированы как «Ams»

«сортир» будут рассортированы как «hjno»

«Тони» будут отсортированы как «noty»

и я хочу видеть именно те упорядоченные значения, как мой выход . Как я получу это ... как я должен выбрать из таблицы, чтобы получить такой вывод?

Пожалуйста, решите мою проблему. Спасибо заранее.

+0

В чем преимущество этого? скремблированные имена? –

+0

да точно. Как мне это сделать? –

+0

Вы что-то пробовали, одна возможность - по значению ascii, каждого цикла письма через –

ответ

2

Вы можете сделать это в чистом SQL с помощью бирки (номера) таблицы, которые вы можете легко создавать и заполнять как этот

CREATE TABLE tally(n INT NOT NULL PRIMARY KEY); 
INSERT INTO tally 
SELECT a.N + b.N * 10 + 1 n 
FROM 
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
ORDER BY n 

Теперь запрос

SELECT names, GROUP_CONCAT(letter ORDER BY letter SEPARATOR '') sorted_name 
    FROM 
(
    SELECT names, MID(names, n.n, 1) letter 
    FROM mytbl e JOIN tally n 
     ON n.n <= CHAR_LENGTH(names) 
) q 
GROUP BY names 

Выхода:

 
| NAMES | SORTED_NAME | 
|-------|-------------| 
| john |  hjno | 
| ron |   nor | 
| sam |   ams | 
| tony |  noty | 

Вот SQLFiddle demo

+0

Большое спасибо. Он отлично работает. –

+0

@AbhikDey Вы очень желанны. Удачи :) – peterm

Смежные вопросы