Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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 - Fatal编程技术网

带负数的MySQL按数值排序问题

带负数的MySQL按数值排序问题,mysql,Mysql,我使用的查询使用: ORDER BY score DESC; “score”只包含数值,也可以是负值。它们的显示顺序似乎不正确。负数可以出现在正数之上 有人知道我应该使用什么查询来显示它们吗 十, 五, 一, -一, -五, -十, 还要阻止他们这样做: * 1 * 10 * 11 * 123 * 1234 * 2 * 25 * 253 * 34 谢谢 order by cast(score as int) desc; 看起来您正在以字符串数据类型存储数字数据。最好将score设置为数

我使用的查询使用:

ORDER BY score DESC;
“score”只包含数值,也可以是负值。它们的显示顺序似乎不正确。负数可以出现在正数之上

有人知道我应该使用什么查询来显示它们吗

  • 十,
  • 五,
  • 一,
  • -一,
  • -五,
  • -十,
还要阻止他们这样做:

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

order by cast(score as int) desc;

看起来您正在以字符串数据类型存储数字数据。最好将score设置为数字数据类型,如
int

score的数据类型可能是char类型。正确地将您的数据类型指定为有符号整数或具有正确精度的十进制数将消除此问题。

我在将负数从最大到最小排序方面没有任何问题。。。以下是我的创建代码和查询,供您参考:

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);

希望这对您有所帮助……

您可以使用以下方式通过强制转换varchar字段来订购:

ORDER BY CAST(`table.field` AS SIGNED) DESC
Where SIGNED将把varchar转换为整数(可以是负值)

可在以下位置获取指南:

在您的情况下,字段的名称是score,因此:

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

什么日期类型是
分数
。它保存数值,但列类型numeric?似乎不是。这些结果是按字母顺序排序的。我打赌
score
列是文本,而不是数字…我尝试将其设置为数字,但它会变为十进制(10,0)。我在问题中输入的结果是一个示例,而不是我收到的结果。“score”在我的数据库中是int。是
$query=“选择消息,
score
,ip,日期,姓名,网站,id FROM
messages`WHERE deleted=0和date>date\u SUB(NOW(),INTERVAL 1 DAY)ORDER BY
score
DESC”;`我应该使用
“ORDER BY ABS(score)DESC吗?”“
你试过我的建议了吗?发生什么事了?你能把数据库写下来,然后发到什么地方吗?例如,见@Logan的答案。如果你遵循@Logan的代码,你会有同样的问题吗?您使用的是什么排序规则?正是我想要的,只是最后我想要ASC:-)
ORDER BY CAST('score' AS SIGNED) DESC;