2012-05-10 6 views
0

В моем интерфейсе администратора У меня есть список поддоменов, которые следуют следуя логике:Pad середине строки с 0s в тузд предложения ORDER BY уважать «истинный» числовой порядок

node-k1 
node-k2 
node-k3 
node-k4 
node-k5 
node-k6 
node-k7 
node-k8 
node-k9 
node-k10 
node-k11 

Они хранятся в MySQL. Мне нужно, чтобы перечислить их в числовом порядке, но так как я не хватает ведущих 0s после node-k, он приказывает им так:

node-k1 
node-k10 
node-k11 
node-k2 
node-k3 
etc 

Там узлы имеют разные буквы, так node-j_ предстанет перед node-k_. ORDER BY node ASC отлично работает с буквами, однако цифры являются раздражающей проблемой.

Есть ли способ сделать предложение ORDER BY поставить их в правильном порядке? Это функция только для администратора, поэтому производительность не является проблемой.

ответ

3

Если число всегда начинается с символа 7, то вы можете привести его в целое, как это:

SELECT * 
FROM tbl 
ORDER BY SUBSTR(subdomain, 1, 6), CAST(SUBSTR(subdomain, 7) AS UNSIGNED) 

Это заказывает их первый префикс, то числом.

+0

@muistooshort, ой, я не видел, что там было больше, чем один префикс. Благодаря! Я обновил свой ответ. – Ami

+0

Число всегда начинается там же, да, однако некоторые поддомены имеют больше букв после числа, например node-k7 и node-k7-b. Это приведет к тому, что node-k7-b появится перед узлом-k7, когда он должен быть после. Кроме этого, это работает. –

+1

@ k1lljoy: Вы можете справиться с этим с помощью другого 'substr'. –

0

в вашей таблице, где были записаны узлы, должно быть числовое поле (уникальное), которое в основном относится к порядку ваших узлов.

ID NodeName
1 Узел-k1
2 Узел-к2
3 Узел-K3
4 Узел-K10
5 Узел-K11

выберите NodeName от порядка table1 с помощью ID.

Rhian