Упорядочить по смешанному буквенно-цифровому столбцу в MySQL - PullRequest
3 голосов
/ 25 ноября 2011

У меня есть следующие значения в моих строках (они должны быть упорядочены следующим образом):

**CLASS_CODE**
6A
6B
6C
10A
10B
10C

Что ж, если я сделаю простое ORDER BY CLASS_CODE, я получу сначала 10x, а затем 6x.

Так что я использую ORDER BY (CLASS_CODE+0), это корректно упорядочивает их, так что 6x идет первым, но также не упорядочивает их соответственно символам.

Каким будет правильный способ заказа, чтобы я мог получить правильный заказ, как показано выше?

Ответы [ 4 ]

3 голосов
/ 25 ноября 2011

Пока вы используете только одну букву в конце значений поля, вы можете использовать следующее:

ORDER BY (class_code+0), right(class_code, 1)
3 голосов
/ 25 ноября 2011

Здесь есть что-то: http://www.carlos -roque.com / 2011/04/19 / sortingук-и-цифры-в-mysql /

Я не могу проверить это прямо сейчас, но я верю, что что-то подобное может быть хорошим взломом:

SELECT CLASS_CODE as hack ... ORDER BY (CLASS_CODE+0)ASC, hack ASC

Может быть, попытаться перевернуть его.

Если это не удалось, вот несколько рассуждений о естественной сортировке: Естественная сортировка в MySQL

0 голосов
/ 27 февраля 2015

У меня был такой сценарий, и я использую функцию CAST.В этом случае ORDER BY CAST(class_code AS DECIMAL)

0 голосов
/ 09 августа 2013

Извините за поздний ответ.Но это может кому-то помочь.

Вы должны реализовать естественную сортировку.Чтобы отсортировать его с помощью PHP, вы можете использовать функцию natsort().

Вы также можете добиться естественной сортировки через MySQL, что достаточно просто.Например:

ORDER BY LENGTH(class_code), class_code
...