2010-10-22 48 views
3

我得到了一个大小为(VARCHAR)的字段。尺寸可以具有整数和字符串值,例如 ,例如(1,2,3-4,X,XL,M,...)。mysql order by integer and varchar

在i由MySQL的功能使用正常的顺序输出如下: 1,10,11,2,44-46,L,M,S,XL,XXL

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

也是一个更“逻辑”的顺序。

msql有可能吗?

+0

它是允许值的有限集合吗?如果是这样,请使用枚举http://dev.mysql.com/doc/refman/5.0/en/enum.html – vinothkr 2010-10-22 09:04:14

+0

大小是有限的,但可能会添加,重命名或删除新值。 (可以在管理后台更改大小值) – ipsum 2010-10-22 09:29:55

回答

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 
); 

当您查询,您有大小加入,为了通过sizes.ord和显示sizes.name像这样的用户:

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

这样,尺寸顺序可以是独立的名称,你仍然可以使用单独的表管理。