Кастомная сортировка в MySQL

133
15 декабря 2016, 15:43

Есть текстовое поле, по которому данные сортируются. В поле могут быть следующие символы:

-0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
абвгдежзийклмнопрстуфхцчшщъыьэюяё

Сортировка в БД меня не устраивает: я хотел бы, чтобы порядок сортировки был таким:

АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя
AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
0123456789

При этом важно, чтобы Е и Ё рассматривались как один и тот же символ, а дефис - не учитывался.

Как подобное можно организовать в MySQL?

Answer 1
order by replace(myfield,'ё','е')

Очень небыстро, но оно-таки отсортирует. Хотите быстрее - копайте настройки кодировки или создавайте еще один столбец со строкой, в которой е и ё уже были заменены на е.

Answer 2

Копать стоит в сторону collation. Где посмотреть порядок символов в каждой из них - не знаю. И не уверен, что удастся "Е и Ё рассматривались как один и тот же символ, а дефис - не учитывался."

Update: хотя нет, вот есть просмотр таблиц http://collation-charts.org/mysql60/mysql604.utf8_unicode_ci.european.html. А с дефисами можно расправиться как-то так

SELECT REPLACE(columnname, "-", "") as c FROM T ORDER BY c
READ ALSO
Как оптимизировать запрос MySQL?

Как оптимизировать запрос MySQL?

Есть таблица usersВ ней 500 000 пользователей

114
Не работает Инсерт в БД?

Не работает Инсерт в БД?

вот такой простой код! и он не работает

105
Проверка на определенные куки

Проверка на определенные куки

Всем приветЕсть система опросов, там может быть несколько разных вопросов

139
Выгружать данные при заполнении формы

Выгружать данные при заполнении формы

Этот код выгружает данные из бд по очереди при обновлении страницы, если данные закончились, он начинает сначалаКак переделать, чтобы пока...

190