2011-02-03 284 views
2

如何按AlphaNumeric顺序排序为MySQL;按字母数字顺序对MySQL列进行排序

假设我有一个这样的数据表。

Name + ID 
AA  | 10 
AE  | 2 
AD  | 1 

当我排序列ID的结果是

1 
10 
2 

但是,当我在选择语句添加+ 0这样的列ID

SELECT * FROM tableName ORDER BY columnName + 0; 

1 
2 
10 

但对于列名的结果是这

AA 
AE 
AD 

我已经提到这个链接,但它不适合我。 Alphanumeric Order By in Mysql

注意:所有列类型都是varchar,我无法预测要插入的数据。 我知道我的问题很简单,但仍然无法得到我想要的结果。 另外我不能使用Java对结果进行排序,因为我使用了LIMIT。 我会明白任何help.Thanks

附加信息:(样品表进行排序上的名称和ID基) 的头1是设置为另一表中的名称,并用HEADER2 W/C同样是ID

CREATE TABLE IF NOT EXISTS `sort` (
    `header1` varchar(200) DEFAULT NULL, 
    `header2` varchar(200) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


INSERT INTO `sort` (`header1`, `header2`) VALUES 
('AA', '10'), 
('AE', '2'), 
('AD', '1'), 
('AD', '1'), 
('AF', 'a'), 
('AF', 'a1'), 
('1', 'a1'); 
+1

当你不能使用Java时,你应该删除标签。您还应该更加精确,例如告诉我们您期望的数据。那么`(AA,5,A6,B4,9C)`,你是否也需要对它进行分类? – maaartinus 2011-02-03 13:24:00

+0

字符串的排序与数字不同。你想排序你的字符串列像一个数字。如果您只在该列中存储数字,那么您应该将其设置为数字数据类型,并且您的问题将消失。 – 2011-02-03 13:35:11

+0

我不能使用Java,因为我需要通过LIMIT得到结果。这是由于我的分页编码。我使用LIMIT来加速查询。而且我还需要根据列进行排序。是的,我需要这样排序(AA,F,A6,B4,9C) – ace 2011-02-03 13:38:05

回答

0

它看起来像它没有排序,因为它显示了我如何插入数据的顺序。

现在很清楚!问题在于你误解了表格的工作原理。 没有为表格定义的顺序。就是这样。每当你做一个没有ORDER BY的SELECT时,数据库可以按照它喜欢的顺序自由返回列。对此你无能为力。

正常情况下,行按主键确定的顺序返回。如果没有,则会使用广告订单,除非有删除。删除后,数据库将新记录放在某处以填补空白。但是,这不是保证行为,当您切换到另一个版本或其他任何版本时,它可能会改变。

不要依赖表中行的顺序。如果订单很重要,请始终使用ORDER BY或包含ORDER BY的VIEW。

1

将字段的数据类型更改为数字数据类型而不是字符类型。

加0必须工作,因为它将数据转换为数字。