mysql - 在 PHP MySQL 中相应地对数字和字母数字进行排序
问题描述
我正在使用类似的查询;
1
2
3A
3
4A
4
但我想得到它
1
2
3
3A
4
4A
我正在使用的是
SELECT * FROM `sections` ORDER BY CAST(`act` as DECIMAL) ASC
我真正想要的是第一个数字,然后是字母数字
3 then 3A
解决方案
考虑到您的acts
列中总是先有整数,然后是字符。通常这称为Natural Sorting
.
问题理解:
- 当我们处理单个数字的变化时,正常排序非常有效,即
1, 1A, 1B, 1AB..
. - 由于字符串类型,当我们在以相同数字开头的数字(如
1, 10, 100...
.
我们可以按照以下方式排序。
- 首先根据它们的整数值对它们进行排序。
- 然后正常对它们进行排序,默认情况下由 mysql 负责。
SELECT * FROM sections
ORDER BY CAST(acts AS UNSIGNED), acts
检查相应的fiddle。它适用于 MySQL 5.5, 5.6, 5.7 & 8.0
。
推荐阅读
- angular - 我们可以在一个应用程序代码中使用 Angular SSR 和 PreRendering 混合吗
- python - tkinter 通过获取输入字段打印值
- python - 找到部分闭合的精明边缘的中间
- oracle - (Oracle)在子查询中使用 WITH 子句
- angular - 使用 angular8 在 api 请求中发送下载的文件
- c - 为什么 BSON 不使用 uint32_t 而不是 int32_t 作为文档长度
- c++ - 在 C++ 中禁用检查语句
- javascript - TypeScript 错误 - 类型 'Ticket[] | undefined' 不是数组类型
- django - 如何通过单击按钮创建模型实例?
- agda - 在 Agda hello-world 中运行的未解决的元数据