我有一个大小字段(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吗?
答案 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;
这样,大小的顺序可以与名称无关,您仍然可以使用单独的表来管理它们。