Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
如何对mysql数据库中的列进行排序_Mysql_Database - Fatal编程技术网

如何对mysql数据库中的列进行排序

如何对mysql数据库中的列进行排序,mysql,database,Mysql,Database,我在mysql数据库表中有一个名为rating的列,其中有多个值,分别来自1+、2+、9+、10+、12+。当我使用查询对该列进行排序时 select * from tbl_app order by rating desc 我将9+作为最高值,有人能告诉我如何将12+作为最高值吗 select convert(replace(rating,'+',' '),unsigned integer) as x from tab order by x desc 试试这个: select convert

我在mysql数据库表中有一个名为
rating
的列,其中有多个值,分别来自
1+、2+、9+、10+、12+
。当我使用查询对该列进行排序时

select * from tbl_app order by rating desc
我将
9+
作为最高值,有人能告诉我如何将
12+
作为最高值吗

select convert(replace(rating,'+',' '),unsigned integer) as x from tab order by x desc
试试这个:

select convert(replace(rating,'+',' '),unsigned integer) as x from tab order by x desc

如果最后一个字符始终为“+”,则上面的sql将起作用


如果最后一个字符始终是“+”,则上面的sql将起作用。

您保留了列评级的数据类型是什么?如果您将其保留为varchar或text,则此查询将无法按降序对值进行排序

您保留了列评级的数据类型是什么?如果您将其保留为varchar或text,则此查询将无法按降序对值进行排序

在MySQL中最简单的方法可能是将那些看起来奇怪的字符串转换为数字:

order by cast(rating as unsigned) desc
-- or less explicitly
order by rating + 0 desc
当这两个类型转换命中
+
时,它们将停止尝试将字符串转换为数字,因此您可以将它们按数字排序


简单地从字符串中删除加号仍然会留下字符串,
'10'<'2'
对于字符串来说与
'10+'<'2+'
一样正确。这实际上是您的全部问题:当您应该将数字存储为整数时,您将数字存储为修饰字符串,当您显示它们时,您将添加
+
修饰。你真的应该修正你的模式,使其有意义,而不是添加丑陋的黑客来解决你的模式的奇怪想法。

在MySQL中,最简单的方法可能是将那些看起来奇怪的字符串转换成数字:

order by cast(rating as unsigned) desc
-- or less explicitly
order by rating + 0 desc
当这两个类型转换命中
+
时,它们将停止尝试将字符串转换为数字,因此您可以将它们按数字排序


简单地从字符串中删除加号仍然会留下字符串,
'10'<'2'
对于字符串来说与
'10+'<'2+'
一样正确。这实际上是您的全部问题:当您应该将数字存储为整数时,您将数字存储为修饰字符串,当您显示它们时,您将添加
+
修饰。你真的应该修正你的模式以使其有意义,而不是添加丑陋的黑客来解决你的模式的奇怪想法。

一列有多个值,如“1+,2+,…….9+,10+,12+”?你试过“按评级+1描述排序”吗?@JungsuHeo:可能是一个包含字符串的列,如
'1+'
'2+”
。。。,
“12+”
@muistooshort-Ah。。我懂了。谢谢。我要问你为什么要把数字存储为那些看起来很滑稽的字符串。一列有多个值,比如“1+,2+,…….9+,10+,12+”?你试过“按评级+1描述排序”吗?@JungsuHeo:可能是一列,其中包含字符串,比如
'1+'
'2+,
'12+,
@muistoshort。。我懂了。谢谢。我要问你为什么要将数字存储为那些看起来很滑稽的字符串。演员阵容可以发挥作用,但你并不真正需要
substr
之类的东西,MySQL在演员阵容中会忽略第一个非数字字符之后的所有内容。@muistooshort 3Q~正如你所说,我做了一个测试,效果也不错。我以前不知道..啊哈~学点东西,很高兴~演员阵容可以发挥作用,但你并不真的需要
substr
的东西,MySQL在演员阵容中会忽略第一个非数字字符后的所有内容。@muistooshort 3Q~正如你所说,我做了一个测试,效果也不错。我以前不知道..啊哈~学点东西,开心吗~