Форумы / National / Russian / Тех. поддержка / Сортировка в движке

12>>>

Oughtem
#1 27.05.2012 12:20

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

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

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

Wadik
#2 27.05.2012 12:28

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

Dayver
#3 27.05.2012 12:36

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

Pavlo Tkachenko aka Dayver
Wadik
#4 27.05.2012 12:45
#34421 Dayver:

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

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

Moool13
#5 27.05.2012 14:42

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

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

Oughtem
#6 27.05.2012 18:42
#34421 Dayver:

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

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

 

Moool13
#7 27.05.2012 18:59

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

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

Trustmaster
#8 27.05.2012 21:10
#34424 Oughtem:

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

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

 

May the Source be with you!
Fox
#9 27.05.2012 21:31

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

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

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

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

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

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

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

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

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

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

Trustmaster
#13 28.05.2012 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 28.05.2012 12:21

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

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

Trustmaster
#15 28.05.2012 12:33

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

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

May the Source be with you!

12>>>