order by seriq asc显示错误的结果

时间:2013-02-07 23:33:32

标签: php mysql database

为什么当我使用order by seriq asc并且数字如“10000”“100000”“97000”

脚本向我显示结果:

1: 10000
2: 100000
3: 97000

4 个答案:

答案 0 :(得分:3)

因为它们作为字符串存储在您的列中

1-尝试将列seriqVARCHAR/CHAR更改为INT

2-您可以使用CAST()将字符串转换为int。例如SELECT CAST('123' AS SIGNED);

答案 1 :(得分:0)

您的seriq列必须是数字列才能对数值进行排序。如果它是文本列,则值将按照collation按字母顺序排序。例如:

CREATE TABLE Test
(
   Foo int  
);

INSERT INTO Test VALUES (10000);
INSERT INTO Test VALUES (100000);
INSERT INTO Test VALUES (97000);

select * from Test order by Foo asc;

Fiddle

答案 2 :(得分:0)

快速修复是让MySQL将字符串转换为ORDER BY子句中的数值。

将您的查询更改为:

ORDER BY seriq+0 ASC

请注意,MySQL会尝试将任何字符串转换为数字值,将字符读取到第一个“无效”字符,例如'123A'将被转换为数值123.

答案 3 :(得分:0)

将列类型更改为int是最佳解决方案,因为它将为您提供最佳的数据存储和性能。但是,如果这不是一个选项,则可以采用以下解决方法:

select * from foo order by seqid+0

这会强制按列排序的类型转换为int,并且排序以数字形式发生。