Натуральная сортировка (Natural Sorting)

Написана 2 Февраля, 2012 в 20:38. Автор: borN_free   |   Теги: mysql, sql, sorting Комментарии 3

Natural SortingНебольшой пост о том, как помогла натуральная сортировка.

Дано: таблица с полем типа TEXT, содержащая данные о моделях запчастей. Задача: вывести данные в порядке убывания по данному полю.

Отлично, давайте напишем запрос:

SELECT * FROM supplies ORDER BY model DESC

Очевидно, что строка "93A" будет больше с точки зрения MySQL, чем строка "1457B", а нам надо наоборот. Результат:

93A
1457B
12АВ
1000123OP

Идеальным, и очень лаконичным решением являетя добавление нуля к имени поля. Наш запрос будет выглядить следующим образом:

SELECT * FROM supplies ORDER BY (model+0) DESC

Помните приведение типов в PHP или Javascript? Нечто схожее происходит и здесь, MySQL сортирует теперь, понимая значение поля как числа, а не строки, и результат теперь удовлетворительный:

1000123OP
1457B
93A
12АВ

PS: столкнулся на практике с ситуацией, когда цены продуктов хранились в поле с типом TEXT, и сортировка продуктов естественно никогда не работала должным образом. Не повторяйте таких ошибок, для каждого случая есть свой тип данных =)

3 comments

ответить
July 17, 2014 at 03:57 am

Спасибо! Полезная заметка =)

ответить
October 4, 2016 at 01:14 pm

Хуйня!

ответить
January 17, 2017 at 05:26 am

Только стоит учесть, что при это вы теряете индекс, и скорость выборки падает.

Оставьте свой комментарий:

Поля с * обязательны.