2016-11-23 2 views
0
$sql="SELECT * FROM stoc WHERE tip='$t' ORDER BY codint ASC LIMIT $offset, $rec_limit"; 

И результатMYSQL рода Одер

Acer1 
Acer10 
Acer11 
Acer12 
Acer2 

и я хочу

Acer1 
Acer2 
Acer10 
Acer11 
Acer12 

Eny идею?

+2

Я подозреваю, что вы собираетесь хотите добавить отдельный столбец для поддержания вашего пользовательского порядка сортировки. Который имел бы выгоду, позволяя вам изменить этот порядок в любое время. – David

ответ

0

Попытайтесь заказать как длину столбца, так и колонку.

SELECT * FROM stoc WHERE tip='$t' 
ORDER BY LENGTH(codint),codint LIMIT $offset, $rec_limit" 

Хотя это может быть проблемой, если а затем Acer... существуют другие строки.

Если они существуют, я думаю, вам нужно разделить вниз строку в строку и номер, а затем order by string,number

0

Я исправить это. Он получает последнюю цифру и порядок ими: http://rextester.com/OWE75092

SELECT `temp`, 
convert(
right(
    `temp`, 
    CHAR_LENGTH(`temp`) - Least(
           Locate('0',concat(`temp`, '0')), 
           Locate('1',concat(`temp`, '1')), 
           Locate('2',concat(`temp`, '2')), 
           Locate('3',concat(`temp`, '3')), 
           Locate('4',concat(`temp`, '4')), 
           Locate('5',concat(`temp`, '5')), 
           Locate('6',concat(`temp`, '6')), 
           Locate('7',concat(`temp`, '7')), 
           Locate('8',concat(`temp`, '8')), 
           Locate('9',concat(`temp`, '9')) 
          ) +1), UNSIGNED INTEGER) as myInt 

FROM Table1 
order by myInt; 
+1

Очень близко, но если не найдено, вернется 0 http://rextester.com/NRSRUM8836 –

+0

Спасибо! Я исправил это! и поставить демо! –

0

Здесь я нашел function для удаления не числовых символов

Я легко дублировать, чтобы создать клон для удаления цифровых символов, изменение:

IF SUBSTR(as_val,i,1) NOT IN .... 
         ^^^^^^ 

DEMO

SELECT `t`, 
     uf_no_digits(`t`) as name, 
     CONVERT(uf_only_digits(`t`), SIGNED) as ID 

FROM Table1 
ORDER BY name, ID 

ВЫВОД

enter image description here

0
SELECT 'A2' x UNION SELECT 'A11' ORDER BY x; 
+-----+ 
| x | 
+-----+ 
| A11 | 
| A2 | 
+-----+ 

SELECT 'A2' x UNION SELECT 'A11' ORDER BY x+0; 
+-----+ 
| x | 
+-----+ 
| A2 | 
| A11 | 
+-----+