Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL。按字符串ID进行数字排序_Php_Mysql - Fatal编程技术网

Php MySQL。按字符串ID进行数字排序

Php MySQL。按字符串ID进行数字排序,php,mysql,Php,Mysql,我正在为dragracing比赛制作现场记分。 我在数据库里有一张表 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,则结果将被排序为字符串 id k9 k8 k7 k6 k5 k4 k3 k17 k16 k15 k14 我需要17-14-9-

我正在为dragracing比赛制作现场记分。 我在数据库里有一张表

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
,则结果将被排序为
字符串

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

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


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

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


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

问题在于您的模式。你应该为字母部分设置一列。那你就可以了

SELECT CONCAT(letter, id) FROM online ORDER BY id ASC
除了你应该给字母起个描述性的名字

编辑:如果字母在排序中很重要(不清楚是否重要),则您可以:

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

问题在于您的模式。你应该为字母部分设置一列。那你就可以了

SELECT CONCAT(letter, id) FROM online ORDER BY id ASC
除了你应该给字母起个描述性的名字

编辑:如果字母在排序中很重要(不清楚是否重要),则您可以:

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

您不能这样排序,例如添加0(k09-k04)或添加另一个整型字段。

您不能这样排序,例如添加0(k09-k04)或添加另一个整型字段。

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

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

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

Select ...
From online
Order By Substring(Id, 1, 1) Desc
    , Cast( Substring(Id, 2, Len(id)) As int ) Desc
最终得到这个:)

最终得到这个:)


在你的结果中,我看不到z27。您希望如何处理排序中的不同字母?a17>b16吗?数字或字母更重要吗?结构是否一致?也就是说,总是一个且只有一个字母后跟数字?那么k25和k26呢?“k”和“z”是表示几种比赛类型的字母。因为没有机会按数字顺序排序,所以我会在另一列中将后者分开。谢谢你的回答!在你的结果中,我看不到z27。您希望如何处理排序中的不同字母?a17>b16吗?数字或字母更重要吗?结构是否一致?也就是说,总是一个且只有一个字母后跟数字?那么k25和k26呢?“k”和“z”是表示几种比赛类型的字母。因为没有机会按数字顺序排序,所以我会在另一列中将后者分开。谢谢你的回答!