如何按AlphaNumeric顺序排序MySQL;
假设我有一个包含这样数据的表。
Name + ID
AA | 10
AE | 2
AD | 1
当我对列ID进行排序时,结果为
1
10
2
但是当我在select id语句中为列id
添加+ 0时SELECT * FROM tableName ORDER BY columnName + 0;
1
2
10
但是列名称的结果是这个
AA
AE
AD
我已经参考过此链接,但它对我不起作用。 Alphanumeric Order By in Mysql
注意:所有列类型都是varchar,我无法预测将插入哪些数据。 我知道我的问题很简单,但我仍然无法得到我想要的结果。 此外,我不能使用Java来对结果进行排序,因为我在其上使用LIMIT。 我会感激任何帮助。谢谢
附加信息:(根据名称和ID进行排序的样本表) header1是设置为另一个表的名称,与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');
答案 0 :(得分:1)
将字段的数据类型更改为数字数据类型而不是字符类型。
正零必须起作用,因为它正在将数据转换为数字。
答案 1 :(得分:0)
它似乎没有排序,因为它显示了我插入数据的顺序。
现在很清楚了!问题是你误解表是如何工作的。 表没有明确的订单。就是这样。无论何时在没有ORDER BY的情况下执行SELECT,DB都可以按照自己喜欢的顺序自由返回列。你无能为力。
通常,行按照主键确定的顺序返回。如果没有,则使用插入顺序,除非有删除。删除后,数据库会将新记录放在某处以填补空白。但是,这不是保证的行为,当您切换到另一个版本或其他任何版本时,它可能会改变。
永远不要依赖表格中的行顺序。如果订单很重要,请始终使用ORDER BY或包含ORDER BY的VIEW。