Убрать ведущие нули при сортировке

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Sereja3578
Сообщения: 173
Зарегистрирован: 2016.09.21, 11:15
Контактная информация:

Убрать ведущие нули при сортировке

Сообщение Sereja3578 » 2017.12.07, 15:01

Есть значения

1
0001,2
0000001
2
000002
002,2

Должен после сортировки быть такой порядок
1
0000001
0001,2
2
000002
002,2

То есть 0000001 и 1 это одинаковые цифры. Скругление тут не применить, так как дробная часть потеряется. На чистом MySQL такого вроде не добиться?

Аватара пользователя
Sereja3578
Сообщения: 173
Зарегистрирован: 2016.09.21, 11:15
Контактная информация:

Re: Убрать ведущие нули при сортировке

Сообщение Sereja3578 » 2017.12.07, 15:15

Запилил так
SELECT
username
FROM user u
ORDER BY TRIM(LEADING '0' FROM u.username) ASC

Чет пока только не могу найти в коде, где правильно переопределить формирование запроса конечного на выборку.

Аватара пользователя
samdark
Администратор
Сообщения: 8620
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Убрать ведущие нули при сортировке

Сообщение samdark » 2017.12.07, 18:37

Не надо такого делать. Это будет full table scan. Данных станет больше — начнёт тормозить.

steaze
Сообщения: 15
Зарегистрирован: 2017.01.28, 21:25

Re: Убрать ведущие нули при сортировке

Сообщение steaze » 2017.12.08, 13:10

Как вариант CAST(%column_name% as DECIMAL(10,1)). Округление можно регулировать.
А что это за значение, имя пользователя такое?

Аватара пользователя
samdark
Администратор
Сообщения: 8620
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Убрать ведущие нули при сортировке

Сообщение samdark » 2017.12.08, 18:20

Тоже не вариант. Данные нормализовать надо и в базе хранить уже в нормально формате.

zelenin
Сообщения: 10146
Зарегистрирован: 2013.04.20, 11:30

Re: Убрать ведущие нули при сортировке

Сообщение zelenin » 2017.12.08, 19:02

Sereja3578 писал(а):
2017.12.07, 15:01
Есть значения

1
0001,2
0000001
2
000002
002,2

Должен после сортировки быть такой порядок
1
0000001
0001,2
2
000002
002,2

То есть 0000001 и 1 это одинаковые цифры. Скругление тут не применить, так как дробная часть потеряется. На чистом MySQL такого вроде не добиться?
но 0001,2 - это вообще не валидное число для mysql.

zelenin
Сообщения: 10146
Зарегистрирован: 2013.04.20, 11:30

Re: Убрать ведущие нули при сортировке

Сообщение zelenin » 2017.12.08, 19:03

Sereja3578 писал(а):
2017.12.07, 15:15
Запилил так
SELECT
username
FROM user u
ORDER BY TRIM(LEADING '0' FROM u.username) ASC

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

zelenin
Сообщения: 10146
Зарегистрирован: 2013.04.20, 11:30

Re: Убрать ведущие нули при сортировке

Сообщение zelenin » 2017.12.08, 19:08

вообще надо в mysql описать функцию, которая будет нормализовать подобную строку к валидному в вашем кейсе числу, создать индекс, используя эту функцию, и сортировать используя функцию - тогда сортировка пойдет по индексу.

Аватара пользователя
rugabarbo
Сообщения: 936
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Убрать ведущие нули при сортировке

Сообщение rugabarbo » 2017.12.08, 21:18

zelenin писал(а):
2017.12.08, 19:08
вообще надо в mysql описать функцию, которая будет нормализовать подобную строку к валидному в вашем кейсе числу, создать индекс, используя эту функцию, и сортировать используя функцию - тогда сортировка пойдет по индексу.
Разве в мускуле есть нормальные function-based индексы? Там ведь какие-то кривые Generated Columns вместо них.

zelenin
Сообщения: 10146
Зарегистрирован: 2013.04.20, 11:30

Re: Убрать ведущие нули при сортировке

Сообщение zelenin » 2017.12.08, 21:20

rugabarbo писал(а):
2017.12.08, 21:18
zelenin писал(а):
2017.12.08, 19:08
вообще надо в mysql описать функцию, которая будет нормализовать подобную строку к валидному в вашем кейсе числу, создать индекс, используя эту функцию, и сортировать используя функцию - тогда сортировка пойдет по индексу.
Разве в мускуле есть нормальные function-based индексы? Там ведь какие-то кривые Generated Columns вместо них.
хз, в гугл вбил, нашел доку. насколько оно ровно работает, не знаю. я пг-мэн)

Аватара пользователя
rugabarbo
Сообщения: 936
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Убрать ведущие нули при сортировке

Сообщение rugabarbo » 2017.12.08, 21:24

zelenin писал(а):
2017.12.08, 21:20
хз, в гугл вбил, нашел доку. насколько оно ровно работает, не знаю. я пг-мэн)
Дай ссылку на доку, которую нашёл. Не понимаю, про что именно говоришь.

Есть generated columns: https://dev.mysql.com/doc/refman/5.7/en ... dexes.html
Есть ещё вариант с триггерами (перестраиваем индексированную колонку триггерами после операций).

Оба варианта – костыли. Доку по чистым function-based в мускуле не нашёл.

zelenin
Сообщения: 10146
Зарегистрирован: 2013.04.20, 11:30

Re: Убрать ведущие нули при сортировке

Сообщение zelenin » 2017.12.08, 21:30

rugabarbo писал(а):
2017.12.08, 21:24
zelenin писал(а):
2017.12.08, 21:20
хз, в гугл вбил, нашел доку. насколько оно ровно работает, не знаю. я пг-мэн)
Дай ссылку на доку, которую нашёл. Не понимаю, про что именно говоришь.

Есть generated columns: https://dev.mysql.com/doc/refman/5.7/en ... dexes.html
Есть ещё вариант с триггерами (перестраиваем индексированную колонку триггерами после операций).

Оба варианта – костыли. Доку по чистым function-based в мускуле не нашёл.
да, видимо попутал.

Аватара пользователя
rugabarbo
Сообщения: 936
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Убрать ведущие нули при сортировке

Сообщение rugabarbo » 2017.12.08, 21:42

zelenin писал(а):
2017.12.08, 21:30
да, видимо попутал
Во, нашёл кое-что: в 2007 году был поднят вопрос о function-based в MySQL, и даже таск они себе поставили: https://lists.mysql.com/mysql/205570 – но, увы, сейчас таск ведёт на 404...

zelenin
Сообщения: 10146
Зарегистрирован: 2013.04.20, 11:30

Re: Убрать ведущие нули при сортировке

Сообщение zelenin » 2017.12.08, 21:45

как я понял не будет даже в 8.0. Ну ок.)

Аватара пользователя
rugabarbo
Сообщения: 936
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Убрать ведущие нули при сортировке

Сообщение rugabarbo » 2017.12.08, 21:48

(:

Да.

Поэтому ТС следует полагаться либо на маленький размер таблички, либо на нормализацию уровня PHP (если табличка-таки большая).

zelenin
Сообщения: 10146
Зарегистрирован: 2013.04.20, 11:30

Re: Убрать ведущие нули при сортировке

Сообщение zelenin » 2017.12.08, 21:50

rugabarbo писал(а):
2017.12.08, 21:48
(:

Да.

Поэтому ТС следует полагаться либо на маленький размер таблички, либо на нормализацию уровня PHP (если табличка-таки большая).
не, ну сэмдарк правильно сказал - денормализовать во вторую колонку. Не очень красиво, но максимально эффективно.

Ответить