2016-11-23 49 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

嘗試按照列的長度和列自身的順序排序。如果其他字符串而不是Acer...存在

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

雖然這可能有問題。

如果它們確實存在,我認爲你需要將字符串分割分解成字符串和數字,然後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 | 
+-----+