Forums / National / Russian / Тех. поддержка / Сортировка в движке

12>>>

Oughtem
#1 2012-05-27 12:20

Ещё со времён седа движок сортирует массив цифр в следующем порядке:

1,11,12,13,2,21,22,3,31,32

на неохроме поднимался этот вопрос, но поправлено не было. Есть этому какое-то лечение? Если нет, то предлагаю внести в список задач для новой версии.

Wadik
#2 2012-05-27 12:28

Согласен! Всегда напрягало это

Dayver
#3 2012-05-27 12:36

Чем вариант с 01,02,03,...,09,10.11,... не устраивает?

Pavlo Tkachenko aka Dayver
Wadik
#4 2012-05-27 12:45
#34421 Dayver:

Чем вариант с 01,02,03,...,09,10.11,... не устраивает?

Это шаманство. Если структура очень ветвистая и большая, то нужно додумывать 01 или 001 или 0001. 

Moool13
#5 2012-05-27 14:42

на неохроме поднимался этот вопрос

Здесь этот вопрос тоже поднимался

Oughtem
#6 2012-05-27 18:42
#34421 Dayver:

Чем вариант с 01,02,03,...,09,10.11,... не устраивает?

Тем, что вопрос касается не только структуры сайта. Любой плагин, любой функцонал, который использует сортировку выводит не правильно. А писать, допустим, в характеристиках товарав: 050м (вместо 50м), 100м, 200м чтобы сортировало правильно - это действительно шаманство.

 

Moool13
#7 2012-05-27 18:59

А писать, допустим, в характеристиках товарав: 050м (вместо 50м), 100м, 200м чтобы сортировало правильно - это действительно шаманство.

Вот на счет этого - соглашусь!

Trustmaster
#8 2012-05-27 21:10
#34424 Oughtem:

Тем, что вопрос касается не только структуры сайта. Любой плагин, любой функцонал, который использует сортировку выводит не правильно. А писать, допустим, в характеристиках товарав: 050м (вместо 50м), 100м, 200м чтобы сортировало правильно - это действительно шаманство.

Для численной сортировки создавайте числовые поля. Их MySQL будет сортировать как числа. Сортировать выборку из БД на стороне PHP - вот это было бы шаманство.

 

May the Source be with you!
Fox
#9 2012-05-27 21:31

Trustmaster: А исправить это можно чтоб пути категорий шли попорядку 1, 2, 3, а не 1, 11, 2, 21, и т д???

ХаЧу ЧПУ для форума!!! ХаЧу ДаКуменцию к ДвИжКу!!! ХаЧу АпиСания TPL ТаГов!??
esclkm
#10 2012-05-27 21:53

ребят вы приводите коды ска строки: 100м 200м и тд

я у себя на сайте юзаю в качестве путей только то что мне понятно anat.golov, hir.uro.mkb и тд

но вы хотите лишить меня этого? а смысл? ди а прямо со стратью хотите числа - вопрос зачем?

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
McDuck
#11 2012-05-27 22:00

Численная сортировка в путях структуры невозможна для числа уровней больше двух, поскольку не существует чисел вида 1.2.3.4

Меня больше озадачивает, что значения пути не проверяются на уникальность

Oughtem
#12 2012-05-27 22:17
#34427 Trustmaster:
Для численной сортировки создавайте числовые поля. Их MySQL будет сортировать как числа. 

это не универсальное решение. Что делать с полями смешанного типа?

Trustmaster
#13 2012-05-28 06:48

Не путайте божий дар с яичницей.

Во-первых, пути категорий - это отдельно взятый случай, живущий по своим правилам. Как заметил esclkm, в них допускаются не только числа, но и буквы. Как заметил McDuck, численная сортировка для них сильно затруднена.

Во-вторых, не существует "универсальное решение". Иначе создатели СУБД давно бы сделали один единственный тип данных вместо всех этих VARCHAR, INT, FLOAT и т.д. Вы просите написать некую волшебную функцию, которая будет на лету распознавать тип данных (а они ещё и разные, оказывается, например "0, 3.75, капуста, 4, 6км, морковь, 300, 999.999") и упорядочивать их заново. Но имейте в виду, что даже если вы просто немного "ошиблись" и храните целочисленные данные в текстовом поле, то MySQL из-за этого тратит на выборки и сортировку по этому полю ощутимо больше времени, потому что операция сравнения строк медленнее, чем сравнения чисел.

Если вы хотите сделать, например, поле "Расстояние до пляжа" со значениями "рядом, 50м, 100м, 150м, 200м, 500м, 1км, 2км, 3км", а затем сделать аккуратную сортировку по нему, то правильный выход - это хранить данные без единиц измерения. Скажем, "0, 50, 100, 150, 200, 500, 1000, 2000, 3000", а буковку "м" выводить в шаблоне. Пользователям будет удобнее, если вы сделаете небольшой плагин, который будет на лету переводить м в км и обратно (при вводе или выводе). Но не просите сделать это базу данных.

May the Source be with you!
Moool13
#14 2012-05-28 12:21

Если вы хотите сделать, например, поле "Расстояние до пляжа" со значениями "рядом, 50м, 100м, 150м, 200м, 500м, 1км, 2км, 3км", а затем сделать аккуратную сортировку по нему, то правильный выход - это хранить данные без единиц измерения. Скажем, "0, 50, 100, 150, 200, 500, 1000, 2000, 3000", а буковку "м" выводить в шаблоне. Пользователям будет удобнее, если вы сделаете небольшой плагин, который будет на лету переводить м в км и обратно (при вводе или выводе). Но не просите сделать это базу данных.

Причем тут юзеры и структура?

Trustmaster
#15 2012-05-28 12:33

Я же сказал, структура - разговор отдельный. Oughtem говорит о том, что надо вообще везде сортировку менять.

В структуре если хотите целочисленную сортировку, то давайте сначала откажемся от поддержки всего кроме чисел в путях. Все готовы?

May the Source be with you!

12>>>