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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
new-developer-site
Сообщения: 7
Зарегистрирован: 2017.03.30, 10:06
Откуда: Kharkiv
Контактная информация:

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

Сообщение new-developer-site »

Здравствуйте! Подскажите пожалуйста как можно осуществить данный тип сортировки (натуральная или естественная)
мой код:

Код: Выделить всё

$this->data = Category::find()->indexBy('id')->orderBy('name')->asArray()->all();
данная сортировка сортирует вот так:

1
10
11
2
21
22
3

а нужно сортировать "естественно"

1
2
3
10
11
21
22

У кого есть какие идеи? Заранее спасибо за Ваше внимание.
Последний раз редактировалось new-developer-site 2017.03.30, 16:40, всего редактировалось 1 раз.

someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Натуральная (естественная) сортировка

Сообщение someweb »

Так сортирует СУБД, для строк "естественный" вариант первый.
Поменяйте тип поля на integer.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.


new-developer-site
Сообщения: 7
Зарегистрирован: 2017.03.30, 10:06
Откуда: Kharkiv
Контактная информация:

Re: Натуральная (естественная) сортировка

Сообщение new-developer-site »

someweb писал(а):
2017.03.30, 14:18
Так сортирует СУБД, для строк "естественный" вариант первый.
Поменяйте тип поля на integer.
и даже не знал что СУБД здесь что-то может решать
в моем случая тип поля важен "VAR" так как в нем текст+цифры
вот такой список получаю
ДАВЛЕНИЕ 100КГ
ДАВЛЕНИЕ 10КГ
ДАВЛЕНИЕ 16КГ
ДАВЛЕНИЕ 250КГ
ДАВЛЕНИЕ 40КГ
ДАВЛЕНИЕ 600КГ
ДАВЛЕНИЕ 60КГ
ДАВЛЕНИЕ 6КГ

new-developer-site
Сообщения: 7
Зарегистрирован: 2017.03.30, 10:06
Откуда: Kharkiv
Контактная информация:

Re: Натуральная (естественная) сортировка

Сообщение new-developer-site »

rak писал(а):
2017.03.30, 14:18
http://stackoverflow.com/a/8557307
Вы имеете ввиду добавить вот так?

Код: Выделить всё

orderBy(['name' => 'ASC'])

rak
Сообщения: 2039
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Натуральная (естественная) сортировка

Сообщение rak »

new-developer-site писал(а):
2017.03.30, 15:44
rak писал(а):
2017.03.30, 14:18
http://stackoverflow.com/a/8557307
Вы имеете ввиду добавить вот так?

Код: Выделить всё

orderBy(['name' => 'ASC'])
я имею в виду, что нужно почитать, что написано по ссылке

new-developer-site
Сообщения: 7
Зарегистрирован: 2017.03.30, 10:06
Откуда: Kharkiv
Контактная информация:

Re: Натуральная (естественная) сортировка

Сообщение new-developer-site »

что написано по ссылке
спасибо, я такое сам находил, до обращения на форум, но меня интересует вопрос как это внедрить в yii ...

rak
Сообщения: 2039
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Натуральная (естественная) сортировка

Сообщение rak »

составьте sql запрос, который вам подходит, а мы поможем внедрить его в yii

caHek2x
Сообщения: 1226
Зарегистрирован: 2016.04.12, 20:41

Re: Натуральная (естественная) сортировка

Сообщение caHek2x »

new-developer-site писал(а):
2017.03.30, 15:44
rak писал(а):
2017.03.30, 14:18
http://stackoverflow.com/a/8557307
Вы имеете ввиду добавить вот так?

Код: Выделить всё

orderBy(['name' => 'ASC'])
вы наверно не заметили по ссылке
ORDER BY LENGTH(alphanumeric), alphanumeric

new-developer-site
Сообщения: 7
Зарегистрирован: 2017.03.30, 10:06
Откуда: Kharkiv
Контактная информация:

Re: Натуральная (естественная) сортировка

Сообщение new-developer-site »

rak писал(а):
2017.03.30, 16:52
составьте sql запрос, который вам подходит, а мы поможем внедрить его в yii

Код: Выделить всё

$sql = 'SELECT `name`,`id` FROM `cetegory` ORDER BY LENGTH (`name`),`name`';

Krash
Сообщения: 29
Зарегистрирован: 2016.04.19, 12:43

Re: Натуральная (естественная) сортировка

Сообщение Krash »

new-developer-site писал(а):
2017.03.31, 11:03
rak писал(а):
2017.03.30, 16:52
составьте sql запрос, который вам подходит, а мы поможем внедрить его в yii

Код: Выделить всё

$sql = 'SELECT `name`,`id` FROM `cetegory` ORDER BY LENGTH (`name`),`name`';
->orderBy(new \yii\db\Expression('LENGTH (name),name'))
Если сортировать только числа, то можно привидением типов сделать

new-developer-site
Сообщения: 7
Зарегистрирован: 2017.03.30, 10:06
Откуда: Kharkiv
Контактная информация:

Re: Натуральная (естественная) сортировка

Сообщение new-developer-site »

->orderBy(new \yii\db\Expression('LENGTH (name),name'))
Если сортировать только числа, то можно привидением типов сделать
а если не только числа?

caHek2x
Сообщения: 1226
Зарегистрирован: 2016.04.12, 20:41

Re: Натуральная (естественная) сортировка

Сообщение caHek2x »

new-developer-site писал(а):
2017.03.31, 12:01
->orderBy(new \yii\db\Expression('LENGTH (name),name'))
Если сортировать только числа, то можно привидением типов сделать
а если не только числа?
а если строки то то что выше и обсудили ...

new-developer-site
Сообщения: 7
Зарегистрирован: 2017.03.30, 10:06
Откуда: Kharkiv
Контактная информация:

Re: Натуральная (естественная) сортировка

Сообщение new-developer-site »

спасибо товарищу -= caHek2x =- , он мне подсказал как решить данную проблему, уверен кому-то точно пригодится, выкладываю решение

Код: Выделить всё

$this->data = Category::find()->indexBy('id')->orderBy(new Expression('left(name, 2), LENGTH(name), name'))->asArray()->all();

Ответить