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

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

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

Сообщение Sereja3578 »

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

1
0001,2
0000001
2
000002
002,2

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

То есть 0000001 и 1 это одинаковые цифры. Скругление тут не применить, так как дробная часть потеряется. На чистом MySQL такого вроде не добиться?
Аватара пользователя
Sereja3578
Сообщения: 204
Зарегистрирован: 2016.09.21, 11:15
Контактная информация:

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

Сообщение Sereja3578 »

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

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

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

Сообщение samdark »

Не надо такого делать. Это будет full table scan. Данных станет больше — начнёт тормозить.
steaze
Сообщения: 30
Зарегистрирован: 2017.01.28, 21:25

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

Сообщение steaze »

Как вариант CAST(%column_name% as DECIMAL(10,1)). Округление можно регулировать.
А что это за значение, имя пользователя такое?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark »

Тоже не вариант. Данные нормализовать надо и в базе хранить уже в нормально формате.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

Чет пока только не могу найти в коде, где правильно переопределить формирование запроса конечного на выборку.
только выхлоп-то какой будет? невалидный
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

вообще надо в mysql описать функцию, которая будет нормализовать подобную строку к валидному в вашем кейсе числу, создать индекс, используя эту функцию, и сортировать используя функцию - тогда сортировка пойдет по индексу.
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

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

Сообщение rugabarbo »

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

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

Сообщение zelenin »

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

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

Сообщение rugabarbo »

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

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

Оба варианта – костыли. Доку по чистым function-based в мускуле не нашёл.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

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

Сообщение rugabarbo »

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

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

Сообщение zelenin »

как я понял не будет даже в 8.0. Ну ок.)
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

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

Сообщение rugabarbo »

(:

Да.

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

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

Сообщение zelenin »

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

Да.

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