2011-04-25 116 views
1

我正在爲dragracing比賽創建實時比分。 我有表數據庫MySQL。數字按字符串排序ID

id  time 
k2  16,010 
k4  15,11 
k25  15,819 
k26  15,114 
z27  19,696 

我需要id獲得該表按相反的順序。 例如,如果選擇SELECT id FROM online order by id desc,結果將被排序爲string

id 
k9 
k8 
k7 
k6 
k5 
k4 
k3 
k17 
k16 
k15 
k14 

我需要17-14-9-4

UPD。 感謝大家! 這一個幫助

SELECT CAST(replace(id, 'k', '') AS SIGNED) AS sort 
FROM online 
ORDER BY `sort` DESC 
+3

在你的結果我沒有看到Z27 。你想如何處理你的排序不同的字母? – 2011-04-25 20:14:53

+2

這裏有什麼用「k」的? – 2011-04-25 20:15:12

+3

是a17> b16?數字或字母更重要嗎? – piotrm 2011-04-25 20:16:57

回答

1

Eventlyally得到這個:)

SELECT CAST(replace(id, 'k', '') AS SIGNED) AS sort 
FROM online 
ORDER BY `sort` DESC 
1

斯普利特場分爲兩種,一種與「K」,另一個數。

或者,不太可取的是,如果您使用PHP,則可以使用nat_sort()方法,或者可能使用usort()使用strnatcmp()函數來比較此特定字段。

1

問題在於你的模式。你應該有一個字母部分的列。那麼你可以做

SELECT CONCAT(letter, id) FROM online ORDER BY id ASC 

除了你應該名稱letter東西描述。

編輯:如果這封信是在分揀重要(目前還不清楚是否是與否),那麼你會怎麼做:

SELECT CONCAT(letter, id) FROM online ORDER BY letter, id ASC 
0

您不能對這樣的說法,醚加0(k09 - k04)或添加另一個爲int的字段。

1

假設結構是一個單個字母后面的數字相一致,你可以這樣做:

Select ... 
From online 
Order By Substring(Id, 1, 1) Desc 
    , Cast(Substring(Id, 2, Len(id)) As int) Desc