mysql按整数和varchar排序

标签 mysql string int

我得到了一个大小为 (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/

相关文章:

c++ - 如何将我的字符串更改为 int 以供我们提供给套接字

PHP 从 MySQL 中选择当日订单

java - 如何将多行StringBuilder转换为字符数组?

java - 我的两个变量无法解析为变量

java - 将两个整数配对,文件中每隔一个整数

C++ while循环和字符串长度

MySQL - 负 double 和字符语法 1064 错误

php - 返回 mysql 中的最后一个插入 id 得到 0?

MySQL - 用户 'jim' @'localhost' 的错误 1045 (28000)(使用密码 YES)

java - 线程 "main"java.util.zip.DataFormatException : incorrect header check 中的异常