我得到了一个大小为 (VARCHAR) 的字段。大小可以有 int 和 string 值, 例如(1、2、3-4、X、XL、M、...)。
当我使用正常的 order by mysql 函数时,输出如下: 1,10,11,2, 44-46, L, M, S, XL, XXL
不包含数字的值按我想要的方式排序。 (我知道这些值被排序为一个字符串并且结果是正确的)。 但我想订购这样的值: 1, 2, 3, 3-4, L, M, S, XL, XXL
也是一个更“合乎逻辑”的顺序。
这可以用 msql 实现吗?
最佳答案
最优雅和灵活的解决方案是将尺寸放在单独的表中并使用 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
);
当您查询时,您将它与尺寸一起加入,按尺寸排序并向用户显示尺寸名称,如下所示:
SELECT colour, price, sizes.name FROM tshirts
JOIN sizes ON tshirts.size_id = sizes.id
ORDER BY sizes.ord;
这样一来,尺寸的顺序就可以独立于名称,您仍然可以使用单独的表格来管理它们。
关于mysql按整数和varchar排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3995302/