mysql 按整数和 varchar 排序

发布于 2024-09-28 14:03:55 字数 290 浏览 4 评论 0原文

我有一个带有大小的字段(VARCHAR)。大小可以有 int 和 string 值, 例如(1、2、3-4、X、XL、M、...)。

当我使用 mysql 的正常 order by 功能时,输出如下: 1,10,11,2, 44-46, L, M, S, XL, XXL

不包含数字的值按我想要的方式排序。 (我知道这些值被排序为字符串并且结果是正确的)。 但我想对这些值进行排序: 1, 2, 3, 3-4, L, M, S, XL, XXL

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

这可以用 msql 实现吗?

I got a field with sizes(VARCHAR). The sizes can have int and string values,
e.g. (1, 2, 3-4, X, XL, M, ...).

When i use the normal order by function of mysql the output is the following:
1,10,11,2, 44-46, L, M, S, XL, XXL

The values that does not contain a number are sorted as i want to do it.
(I know that the values are sorted as a string and the result is correct).
But i want to order the values like this:
1, 2, 3, 3-4, L, M, S, XL, XXL

Also a more "logical" order.

Is this possible with msql?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把人绕傻吧 2024-10-05 14:03:55

最优雅、最灵活的解决方案是将尺寸放在单独的表中并使用 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;

这样,大小的顺序可以独立于名称,并且您仍然可以使用单独的表来管理它们。

The most elegant and flexible solution is to put the sizes in a separate table and use JOINs. For example a table definition can look like this:

CREATE TABLE sizes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  ord INT,
  name VARCHAR(8)
);

And in those tables where you previously used sizes, you should use size_id:

CREATE TABLE tshirts (
  id INT PRIMARY KEY AUTO_INCREMENT,
  colour VARCHAR(16),
  price INT,
  size_id INT
);

And when you query, you JOIN it with sizes, order by sizes.ord and display sizes.name to the user like this:

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

This way, the order of sizes can be independent of the name, and you can still manage them using the separate table.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文