我有一个sizes(VARCHAR)字段。大小可以有int和字符串值,例如(1,2,3-4,X,XL,M,...)。
当我使用mysql的normal order by函数时,输出如下: 1,10,11,2,44-46,L,M,S,XL,XXL
不包含数字的值按照我想要的方式进行排序。(我知道这些值是作为字符串排序的,并且结果是正确的)。但是我想这样排序: 1,2,3,3-4,L,M,S,XL,XXL
还有一个更“合乎逻辑”的顺序。
使用msql可以做到这一点吗?
发布于 2010-10-22 17:40:06
最优雅和灵活的解决方案是将大小放在一个单独的表中,并使用连接。例如,表定义可能如下所示:
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连接它,order by sizes.ord并向用户显示sizes.name,如下所示:
SELECT colour, price, sizes.name FROM tshirts
JOIN sizes ON tshirts.size_id = sizes.id
ORDER BY sizes.ord;这样,大小的顺序可以独立于名称,并且您仍然可以使用单独的表来管理它们。
https://stackoverflow.com/questions/3995302
复制相似问题