mysql按整数和varchar顺序排序

时间:2010-10-22 08:59:34

标签: mysql string int

我有一个大小字段(VARCHAR)。大小可以有int和string值, 例如(1,2,3-4,X,XL,M,......)。

当我使用mysql函数的正常顺序时,输出如下: 1,10,11,2,44-46,L,M,S,XL,XXL

不包含数字的值按我想要的方式排序。 (我知道值被排序为字符串,结果是正确的)。 但我想订购这样的值: 1,2,3,4-4,L,M,S,XL,XXL

也是一个更“逻辑”的订单。

这可以用msql吗?

1 个答案:

答案 0 :(得分:1)

最优雅,最灵活的解决方案是将尺寸放在单独的表中并使用JOIN。例如,表定义可能如下所示:

CREATE TABLE sizes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  ord INT,
  name VARCHAR(8)
);

在以前使用过尺寸的表中,您应该使用size_id:

CREATE TABLE tshirts (
  id INT PRIMARY KEY AUTO_INCREMENT,
  colour VARCHAR(16),
  price INT,
  size_id INT
);

当你查询时,你用大小加入它,按size.ord排序,并向用户显示sizes.name,如下所示:

SELECT colour, price, sizes.name FROM tshirts
  JOIN sizes ON tshirts.size_id = sizes.id
  ORDER BY sizes.ord;

这样,大小的顺序可以与名称无关,您仍然可以使用单独的表来管理它们。