我正在为比赛创造现场比分。 我在数据库中有表格
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
答案 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的字段。