我运行此查询并需要按状态字段对结果进行排序。
SELECT status
FROM myusers
WHERE status IN (7,8,35)
ORDER BY status DESC
我得到回应:
8
7
7
7
35
为什么我使用时它不能正确排序IN (7,8,35)
我运行此查询并需要按状态字段对结果进行排序。
SELECT status
FROM myusers
WHERE status IN (7,8,35)
ORDER BY status DESC
我得到回应:
8
7
7
7
35
为什么我使用时它不能正确排序IN (7,8,35)
这是因为您当前列的string
格式存储为VARCHAR
. 将其转换为整数以获得正确的结果。
SELECT status
FROM myusers
WHERE status IN (7,8,35)
ORDER BY CAST(status AS SIGNED) DESC
或者另一种方法是将status
列的当前数据类型更改为INT
您的status
字段应该是正确排序的数字字段。当前的顺序显然是按字母顺序排列的。
您的状态列可能是VARCHAR
,将其转换为INT
列,它应该可以工作。
我想你的“状态”是 VARCHAR 类型的,所以排序顺序是正确的。您正在按降序排序,因此“8”(按字典顺序)大于“7”,“7”大于“35”。
对于数字排序,将状态字段的数据类型更改为数字。
对于订单 (7,8,35),您应该使用 ORDER BY status ASC ;-)