Убрать ведущие нули при сортировке
- Sereja3578
- Сообщения: 204
- Зарегистрирован: 2016.09.21, 11:15
- Контактная информация:
Убрать ведущие нули при сортировке
Есть значения
1
0001,2
0000001
2
000002
002,2
Должен после сортировки быть такой порядок
1
0000001
0001,2
2
000002
002,2
То есть 0000001 и 1 это одинаковые цифры. Скругление тут не применить, так как дробная часть потеряется. На чистом MySQL такого вроде не добиться?
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: Убрать ведущие нули при сортировке
Запилил так
SELECT
username
FROM user u
ORDER BY TRIM(LEADING '0' FROM u.username) ASC
Чет пока только не могу найти в коде, где правильно переопределить формирование запроса конечного на выборку.
SELECT
username
FROM user u
ORDER BY TRIM(LEADING '0' FROM u.username) ASC
Чет пока только не могу найти в коде, где правильно переопределить формирование запроса конечного на выборку.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Убрать ведущие нули при сортировке
Не надо такого делать. Это будет full table scan. Данных станет больше — начнёт тормозить.
Нравится Yii? Давайте сделаем его лучше!.
Re: Убрать ведущие нули при сортировке
Как вариант CAST(%column_name% as DECIMAL(10,1)). Округление можно регулировать.
А что это за значение, имя пользователя такое?
А что это за значение, имя пользователя такое?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Убрать ведущие нули при сортировке
Тоже не вариант. Данные нормализовать надо и в базе хранить уже в нормально формате.
Нравится Yii? Давайте сделаем его лучше!.
Re: Убрать ведущие нули при сортировке
но 0001,2 - это вообще не валидное число для mysql.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 такого вроде не добиться?
Re: Убрать ведущие нули при сортировке
только выхлоп-то какой будет? невалидныйSereja3578 писал(а): ↑2017.12.07, 15:15 Запилил так
SELECT
username
FROM user u
ORDER BY TRIM(LEADING '0' FROM u.username) ASC
Чет пока только не могу найти в коде, где правильно переопределить формирование запроса конечного на выборку.
Re: Убрать ведущие нули при сортировке
вообще надо в mysql описать функцию, которая будет нормализовать подобную строку к валидному в вашем кейсе числу, создать индекс, используя эту функцию, и сортировать используя функцию - тогда сортировка пойдет по индексу.
Re: Убрать ведущие нули при сортировке
Разве в мускуле есть нормальные function-based индексы? Там ведь какие-то кривые Generated Columns вместо них.
Re: Убрать ведущие нули при сортировке
Re: Убрать ведущие нули при сортировке
Дай ссылку на доку, которую нашёл. Не понимаю, про что именно говоришь.
Есть generated columns: https://dev.mysql.com/doc/refman/5.7/en ... dexes.html
Есть ещё вариант с триггерами (перестраиваем индексированную колонку триггерами после операций).
Оба варианта – костыли. Доку по чистым function-based в мускуле не нашёл.
Re: Убрать ведущие нули при сортировке
да, видимо попутал.rugabarbo писал(а): ↑2017.12.08, 21:24Дай ссылку на доку, которую нашёл. Не понимаю, про что именно говоришь.
Есть generated columns: https://dev.mysql.com/doc/refman/5.7/en ... dexes.html
Есть ещё вариант с триггерами (перестраиваем индексированную колонку триггерами после операций).
Оба варианта – костыли. Доку по чистым function-based в мускуле не нашёл.
Re: Убрать ведущие нули при сортировке
Во, нашёл кое-что: в 2007 году был поднят вопрос о function-based в MySQL, и даже таск они себе поставили: https://lists.mysql.com/mysql/205570 – но, увы, сейчас таск ведёт на 404...
Re: Убрать ведущие нули при сортировке
как я понял не будет даже в 8.0. Ну ок.)
Re: Убрать ведущие нули при сортировке
(:
Да.
Поэтому ТС следует полагаться либо на маленький размер таблички, либо на нормализацию уровня PHP (если табличка-таки большая).
Да.
Поэтому ТС следует полагаться либо на маленький размер таблички, либо на нормализацию уровня PHP (если табличка-таки большая).