2012-01-15 55 views
-1

我有一個表像下Mysql的排序問題

ID Position 
1  A1 
2  A2 
3  A3 
4  A4 
5  A5 
6  A6 
7  A7 
8  A8 
9  A9 
10  A10 
11  A11 
12  A12 
13  B1 
. 
. 
22  B10 
. 
.  H12 

注意,ID不是唯一的,但位置是唯一

當我做

Select * from <tablename> 

我得到

A1,B1,C1,D1,E1 ... H1 ... H12

作爲輸出 當我做

Select * from <tablename> order by Position 

我得到

A1,A10,A11,A12,A2,A3 .....

爲輸出

我想排序它使得我的輸出爲A1,A2,A3, A4,A5,A6,A6,A8,A9,A10,A11,A12,B1,B2 ... .. H12

應該用什麼查詢?

回答

2

試試這個:

SELECT * FROM <tablename> ORDER BY SUBSTR(position FROM 1 FOR 1), CAST(SUBSTR(position FROM 2) AS UNSIGNED) 
+0

謝謝..順便說一句什麼CAST(SUBSTR(位置從2)做 – Ank 2012-01-15 23:19:32

+1

它將您的'位置'的子字符串轉換/鑄造爲無符號 – falinsky 2012-01-15 23:25:23

0

如果你需要一個主類別和子類別進行排序,你會好起來使用兩個INT列。

執行查詢一次。

通過的結果爲每個主類別環路。

如果你使用PHP使用尋求重置陣列..

$query1 = "SELECT * FROM table"; 
$result1 = mysql_query($query1); 

if ($result1) 
{ 
// While loop most likely, iterate main categories. 
while ($row1 = mysql_fetch_assoc($result1)) 
{ 
    //Stuff 
} 

// reset $result1 
// resets anything associated with result1 (e.g. $row1) 
mysql_data_seek($result1,0); 

while ($row1 = mysql_fetch_assoc($result1)) 
{ 
    //iterate for sub-categories 
} 
} 
+0

有,我可以用我想要在MySQL的方式對其進行排序的SQL查詢? – Ank 2012-01-15 23:12:47

+0

您希望以正確的方式存儲數據,否則隨着時間的推移,隨着時間的推移,您將越來越偏離數據意圖處理的方式,從而導致大量頭痛。 使用ORDER BY DESC或使用ORDER BY ASC進行排序,排序的腳本語言種類主要適用於類別,然後。 – John 2012-01-15 23:25:14

0

這是不好的。你認爲你所要求的不同的排序,但你真的治療的位置列兩個值...炭和(其中的每一個不同的排序)數量

,你可能會考慮改變數據。零填補的立場會做到這一點。 A01代替A1

,或者你可以有一個pos_group = A,pos_number = 1

,或者你可以試試這個醜陋的黑客攻擊,它可能不會表現非常好。

select * from <t1> order by left(position,1), substring(position from 2); 
+0

它給出了相同的輸出作爲選擇*從排序 – Ank 2012-01-15 23:21:45