2013-05-06 175 views
5

我有一個數組,我想按字母順序排序,但也是由數字結尾。mysql排序字母和數字

"SELECT DISTINCT Number FROM database WHERE 1 Order By Number ASC"; 

這是它目前是如何排序:

Number 1 
Number 10 
Number 11 
Number 2 
Number 3 
Number 4 
Number 5 
Number 6 
Number 7 
Number 8 
Number 9 
The End 

這是我希望它進行排序:

Number 1 
Number 2 
Number 3 
Number 4 
Number 5 
Number 6 
Number 7 
Number 8 
Number 9 
Number 10 
Number 11 
The End 
+1

看起來你的號碼欄是一個字符串值。您可以嘗試在訂購前將其轉換爲整數 – 2013-05-06 06:55:39

+0

試試我的答案。它工作正常。 – 2013-05-06 07:20:02

+0

[自然排序在MySQL]中可能的重複(http://stackoverflow.com/questions/153633/natural-sort-in-mysql) – Ejaz 2013-05-06 12:04:18

回答

6

添加其他排序條件:

Order By LENGTH(Number), Number; 

這因爲更長的數字也是一個更大的數字;對於相同長度的數字,可以進行文本比較,因爲'0' < '1' .... < '9'

+0

這是否會始終工作,因爲我真的覺得可能有一些隱藏的捕獲。 – Aquillo 2013-05-06 06:59:24

+0

@Aquillo我已經添加了解釋它爲什麼有效。隨意找到一個案例,它給出了錯誤的結果:) – 2013-05-06 07:03:11

+0

我一直在使用這種方法多年。有用! +1 – Fluitketel 2013-05-06 07:46:52

0

sql有函數在排序時將字符串轉換爲整數。

如果你正在使用MySQL,這是你用來做你想做的是什麼:

SELECT DISTINCT Number FROM database Order By CAST(Number AS UNSIGNED) ASC 

如果您使用的是不同的數據庫,則需要Google如何投一列的整數爲您的數據庫。

注意:其他一些解決方案的工作......但有點哈克 - 即他們看起來很酷,但未來可能無法正常工作。上述不正是你想要什麼,你是如何「應該」做的;)

+0

'SELECT CAST('Number 11'AS UNSIGNED)'yield'0' – 2013-05-06 07:04:58

+0

爲什麼你要給它傳遞一個字數字的字符串? 不要傳遞「數字11」,傳遞「11」或名爲數字的列 – 2013-05-06 07:19:06

+0

Try: 'SELECT CAST('11'AS UNSIGNED)''你正確得到'11' – 2013-05-06 07:20:38

2

試試這個: -

SELECT distinct numberr FROM tablename Order By cast(substring(numberr,7) as unsigned int) ASC ; 

其工作的罰款。

出放: -

Number 1 
Number 2 
Number 3 
Number 4 
Number 5 
Number 6 
Number 7 
Number 10 
Number 11 
+0

它不按字母順序排序。 – 2013-05-06 07:22:57

+1

只有在開始處的字符串始終爲7個字符的情況下才能使用......您無法保證。 – 2013-05-06 07:24:08

+0

是@TarynEast你是對的。 – 2013-05-06 07:26:01

0
"SELECT DISTINCT Number FROM database WHERE 1 Order By substring_index(Number,'Number',1),cast(substring_index(Number,'Number ',-1) as unsigned int) ASC"; 
+0

'結局'會發生什麼? – Aquillo 2013-05-06 09:55:46

+0

@Aquillo,你的意思是'結束'而不是'數字'字符串? – Amir 2013-05-06 10:37:17

+0

而不是「數字9」,例如,在提供的示例中。 – Aquillo 2013-05-06 11:01:46

0

有點遲到了。但你也可以使用另一種方法。從查詢中獲取結果,然後用php對它們進行排序。這裏試試這個。

natsort($results); // results has your query results use natural sort. 
$sorted_array = array_values($the_array); // then reorder the index 

希望能幫助別人。 :)