mysql 按整数和 varchar 排序
我有一个带有大小的字段(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最优雅、最灵活的解决方案是将尺寸放在单独的表中并使用 JOIN。例如,表定义可以如下所示:
在以前使用尺寸的那些表中,您应该使用 size_id:
当您查询时,您将其与尺寸连接,按尺寸排序并向用户显示尺寸名称,例如这样:
这样,大小的顺序可以独立于名称,并且您仍然可以使用单独的表来管理它们。
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:
And in those tables where you previously used sizes, you should use size_id:
And when you query, you JOIN it with sizes, order by sizes.ord and display sizes.name to the user like this:
This way, the order of sizes can be independent of the name, and you can still manage them using the separate table.