0

我运行此查询并需要按状态字段对结果进行排序。

SELECT status
FROM myusers
WHERE status IN (7,8,35)  
ORDER BY status DESC

我得到回应:

8
7
7
7
35

为什么我使用时它不能正确排序IN (7,8,35)

4

4 回答 4

2

这是因为您当前列的string格式存储为VARCHAR. 将其转换为整数以获得正确的结果。

SELECT status
FROM myusers
WHERE status IN (7,8,35)  
ORDER BY CAST(status AS SIGNED) DESC

或者另一种方法是将status列的当前数据类型更改为INT

SQLFiddle 演示

于 2012-09-06T22:22:35.477 回答
1

您的status字段应该是正确排序的数字字段。当前的顺序显然是按字母顺序排列的。

于 2012-09-06T22:21:41.400 回答
0

您的状态列可能是VARCHAR,将其转换为INT列,它应该可以工作。

于 2012-09-06T22:21:57.047 回答
0

我想你的“状态”是 VARCHAR 类型的,所以排序顺序是正确的。您正在按降序排序,因此“8”(按字典顺序)大于“7”,“7”大于“35”。

对于数字排序,将状态字段的数据类型更改为数字。

对于订单 (7,8,35),您应该使用 ORDER BY status ASC ;-)

于 2012-09-06T22:23:01.060 回答