2012-02-15 185 views
2

我该如何解决这个小问题SQL命令失败

这里是截图:

enter image description here

,这是查询:

SELECT * 
FROM serverinfo 
ORDER BY rank_pts DESC 

正如你所看到的订单不合格。

回答

0

变化rank_pts为FLOAT *edit。它看起来像其错误的类型进行排序

+0

但它会分手“” – Dave 2012-02-16 00:01:33

+3

咩,+1实现的类型可能是VARCHAR,但-1建议INT时,他显然有他需要存储十进制值。所以+0从我。 – Interrobang 2012-02-16 00:01:52

+0

是的,你说得对@Interrobang。对于那个很抱歉 ! – seanbreeden 2012-02-16 00:06:15

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 
+0

感谢兄弟:-) – Dave 2012-02-16 00:09:05

8

你可以试试这个:

ORDER BY CAST(rank_pts as float) DESC 
3

你可能应该是列类型更改为浮动。正如其他人指出的,它看起来像一个varchar或文本列。如果情况并非如此,PHPMyAdmin仅以本地化格式显示(小数代表,而不是 - 对于我们英国人),请不要理会我的答案。

虽然铸造结果查询将工作作为阿尔贝托认为,这是inefficent对每个查询做。如果您想操作数字并对数据进行排序,则应将其存储为数字。最终,您可能希望在不同的本地化环境下显示数字,这会让您头痛不已。

我将在数据存储为在DB的浮子和处理如何在应用侧的局部格式显示它的任何逻辑。

+2

+1。将格式保留到前端。存储格式化值会使应用程序非常脆弱。 – Leigh 2012-02-16 20:36:19

3

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

显然,速战速决是投列在order by,老乡程序员已经指出。

+2

我真的很失望,这里提到的许多问题都是关于快速修复,而不是真正的解决方案。 – 2012-02-16 15:16:28

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