Mysql - 我的订单中发生了什么?

时间:2013-07-26 13:42:53

标签: mysql

我有像

这样的表格
CREATE TABLE IF NOT EXISTS example 
(id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
primary key ( id ))

我从1 - >插入表20记录20喜欢

id | name
1  | example 0
2  | example 1
...
20 | example 19

我像

一样查询
SELECT *
FROM `example`
ORDER BY `name` DESC 

但结果是

id | name
10 | example 9
9  | example 8
...
1  | example 0

我认为那是

id | name
20 | example 19
19 | example 18
...
1  | example 0

我怎么做我的想法。感谢

5 个答案:

答案 0 :(得分:2)

这是一个字符串排序,而不是数字排序

ASCII明智,降序,'9'按预期在'20'之前。这也可以被认为是'9 '(尾随空格)与'20'进行比较

字符串排序是字符性的。

答案 1 :(得分:1)

使用SUBSTRING使用LOCATE获取空格后的数字,然后使用ORDER BYCAST应该有效。

SELECT   *
FROM     example
ORDER BY CAST(SUBSTRING(name,LOCATE(' ',name)+1) AS SIGNED) DESC

答案 2 :(得分:0)

SELECT *
FROM `example`
ORDER BY CAST(name AS UNSIGNED)desc;

fiddle

答案 3 :(得分:0)

它正在进行alpha排序,因为它是一个字符串。

实施例2在实施例1000之后。

一些选择 您可以将其拆分为两个字段名称和编号 您可以使用String函数进行大量混乱,将其拆分以进行排序 您可以添加前导零示例0002在示例1000之前。

答案 4 :(得分:-1)

您按名称排序,这将导致按字母顺序排列。尝试

    ORDER BY id desc;