MySQL的。按字符串ID排序的数字

时间:2011-04-25 20:06:45

标签: php mysql

我正在为比赛创造现场比分。 我在数据库中有表格

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

5 个答案:

答案 0 :(得分:1)

将字段拆分为两个,一个带有“k”,另一个带有数字。

或者,不太优选,如果您使用PHP,则可以使用nat_sort()方法,或者可能usort()使用strnatcmp()函数来比较此特定字段。

答案 1 :(得分:1)

问题是你的架构。你应该有一个字母部分的列。然后就可以了

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

除非您将letter命名为描述性内容。

编辑:如果这封信在排序中很重要(不清楚它是否合适)那么你会这样做:

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

答案 2 :(得分:1)

假设结构与单个字母后跟数字一致,您可以执行以下操作:

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

答案 3 :(得分:1)

最终得到这个:)

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

答案 4 :(得分:0)

你不能这样排序,以太添加0(k09 - k04)或添加另一个是int的字段。