SQL Order失败

时间:2012-02-15 23:58:17

标签: php mysql

如何解决这个小问题

这是截图:

enter image description here

这是查询:

SELECT * 
FROM serverinfo
ORDER BY rank_pts DESC 

正如您所看到的那样,订单是无关紧要的。

6 个答案:

答案 0 :(得分:8)

你可以试试这个:

ORDER BY CAST(rank_pts as float) DESC 

答案 1 :(得分:4)

似乎你的ranl_pts列是varchar类型,所以它不是按数字排序。

使用以下技巧。

  SELECT * 
  FROM serverinfo
  ORDER BY rank_pts+0 DESC 

OR

 SELECT * 
  FROM serverinfo
  ORDER BY CAST(rank_pts AS DOUBLE) desc

答案 2 :(得分:3)

您可能应该将该列类型更改为float。正如其他人所指出的,它看起来像是varchar或text列。如果不是这样的话,PHPMyAdmin只是以局部格式显示(小数代表,而不是。 - 对于我们英国人),请不要理会我的其余答案。

虽然在查询中转换结果会像Alberto建议的那样工作,但是对每个查询都无效。如果要以数字方式操作和排序数据,则应以数字方式存储它。最终你可能想要在不同的本地化下显示数字,你会有另一个头痛。

我会将数据作为浮点数存储在数据库中,并处理有关如何在应用程序端以本地化格式显示数据的任何逻辑。

答案 3 :(得分:3)

我建议将列数据类型更改为数字而不是字符。这肯定会影响代码的其他部分,但我认为这是值得的,以避免将数值存储为字符表示的其他副作用。

显然,快速修复方法是在order by中投射列,正如编码人员已经指出的那样。

答案 4 :(得分:0)

rank_pts更改为FLOAT *edit。它看起来像是错误的类型

答案 5 :(得分:0)

SELECT * 
FROM serverinfo
ORDER BY CAST(Rank_Pts AS DOUBLE) desc