Как сделать правильную сортировку в MySQL?

Есть таблица товаров который есть поле артикул.
Пример
а-1
а-2
а-11
б-1
буквы-1

Мне нужно отсортировать их и по алфавиту и по возрастанию.
Сейчас происходит так
a-1
a-11
a-12
a-2

а хотелось бы
a-1
a-2
a-11
a-12

Подскажите есть ли какой то лёгкое решение без костылей, которые приходят мне в голову.
Заранее спасибо.
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
SELECT * FROM `table` ORDER BY SUBSTRING(`field`, 1, 1), LENGTH(`field`), `field`;
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Akdmeh
@Akdmeh
PHP, Yii2, Music
www.copterlabs.com/natural-sorting-in-mysql
Думаю, частично должна помочь эта статья, но она не панацея.
Ответ написан
Комментировать
@LiguidCool
Было бы логично разделить столбец на 2.
Ответ написан
Комментировать
@emtsov Автор вопроса
Да работает лишь от части. Если бы у меня везде было a- то помогло бы.
А так идут сначала все буквы по алватиту с цифрами до 10, а потом остальные.
c2cfb99d61f24e5896c1559863ae268e.png
Ответ написан
Комментировать
@etc83
Software Engineer
drop TEMPORARY table if exists idss;

CREATE TEMPORARY TABLE `idss` (
	`id` INT(11) NULL DEFAULT NULL,
	`tag` VARCHAR(50) NULL DEFAULT NULL
);

INSERT INTO `idss` (`id`, `tag`) VALUES
(1, 'a-1'),
(2, 'a-2'),
(3, 'a-3'),
(4, 'a-9'),
(5, 'a-7'),
(6, 'a-8'),
(7, 'a-4'),
(8, 'a-5'),
(9, 'a-6'),
(13, 'c-3'),
(14, 'c-4'),
(15, 'c-2');

select *, 
substring(tag, 1, 1) 'Letter',
ASCII(substring(tag, 1, 1)) 'Letter_As_ASCII_code',
CAST(substring(tag, 3, length(tag)) AS SIGNED) 'LastDigit'
from idss
order by Letter_As_ASCII_code, LastDigit


9e4e60a081ea4fcd99679d99404b0bf4.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы