MySQL ORDER BY带负数的数值问题

时间:2011-02-22 22:36:08

标签: mysql

我使用的查询使用:

ORDER BY score DESC;

'得分'只包含数值,也可以为负值。它们似乎没有以正确的顺序显示。负数可以出现在正数之上。

有没有人知道我应该使用的查询来显示它们:

  • 10
  • 5
  • 1
  • -1
  • -5
  • -10

还要阻止他们这样做:

* 1
* 10
* 11
* 123
* 1234
* 2
* 25
* 253
* 34

感谢。

5 个答案:

答案 0 :(得分:5)

order by cast(score as int) desc;

您似乎将数字数据存储在字符串数据类型中。将分数设为数字数据类型会更好,例如int

答案 1 :(得分:2)

可以通过使用以下方式转换字段来使用cast varchar进行排序:

ORDER BY CAST(`table.field` AS SIGNED) DESC

SIGNED将varchar转换为整数(可以是负值)。

此处提供了指南:http://www.kreci.net/web-development/sort-varchar-as-int-in-mysql-query/

答案 2 :(得分:0)

您的分数数据类型可能是char类型。正确地将您的数据类型指定为具有适当精度的有符号整数或小数将使这个问题消失。

答案 3 :(得分:0)

我没有任何问题让负数从最大到最少排序......这是我的CREATE代码和查询,供您参考:

CREATE TABLE `test` (
  `score` INT(10) NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;

select * from test order by score desc;

从我的数据库转储:

INSERT INTO `test` (`score`) VALUES (10);
INSERT INTO `test` (`score`) VALUES (5);
INSERT INTO `test` (`score`) VALUES (1);
INSERT INTO `test` (`score`) VALUES (-1);
INSERT INTO `test` (`score`) VALUES (-5);
INSERT INTO `test` (`score`) VALUES (-10);
INSERT INTO `test` (`score`) VALUES (-11);
INSERT INTO `test` (`score`) VALUES (7);

希望这会有所帮助......

答案 4 :(得分:0)

ORDER BY CAST('name_of_field' AS SIGNED) DESC;

在您的情况下,name_of_field的得分为:

ORDER BY CAST('score' AS SIGNED) DESC;