сортировка последним цифрам строки

filips

Новичок
сортировка последним цифрам строки

есть таблица номеров XXXXXXX

SELECT * FROM `numbers` ORDER BY `nomer` ASC

нужно отсортировать номера чтобы сначала вывелись одинаковые 3 последнии цифры, например
XXXX000
XXXX111
XXXX222

далее 4 одинаковые цифры
XXX1111
XXX2222
XXX3333

далее по возрастанию
XXXXXX1
XXXXX21
XXXX321
XXX4321

я так понимаю нужно юзать регулярные выражения и юнион, но с регулярками у меня туго
 

filips

Новичок
спасибо, разобрался

только как бы упростить выражение?

WHERE (
RIGHT( nomer, 3 ) = '000'
OR RIGHT( nomer, 3 ) = '111'
OR RIGHT( nomer, 3 ) = '222'
OR RIGHT( nomer, 3 ) = '333'
OR RIGHT( nomer, 3 ) = '444'
OR RIGHT( nomer, 3 ) = '555'
OR RIGHT( nomer, 3 ) = '666'
OR RIGHT( nomer, 3 ) = '777'
OR RIGHT( nomer, 3 ) = '888'
OR RIGHT( nomer, 3 ) = '999'
)
 

Beavis

Banned
а не легче условие сделать что последняя цифра равна предпоследней и предпредпоследней?

ну или например что на 111 без остатка делится?
а то жесть какая то получается)
 

filips

Новичок
а не легче условие сделать что последняя цифра равна предпоследней и предпредпоследней?
точно, не догадался


только почему то после union первая выборка, потом еще сотрируется по второй

Код:
(
	SELECT *, RIGHT( nomer, 3 ) tri
	FROM `numbers` 
	WHERE MID( nomer, 5, 1 ) = MID( nomer, 6, 1 ) 
	AND MID( nomer, 7, 1 ) = MID( nomer, 6, 1 ) 
	AND `kod_id` = '2'
	AND `status` = '1'
	AND `tarif_id` = '1'
	AND `atribut_id` <> '22'
	ORDER BY tri ASC 
)UNION(
	SELECT *, RIGHT( nomer, 3 ) tri
	FROM `numbers` WHERE
	`kod_id` = '2'
	AND `status` = '1'
	AND `tarif_id` = '1'
	AND `atribut_id` <> '22'
	ORDER BY REVERSE( `nomer` ) ASC 
)
 
Сверху