php - MySQL 字母数字值的自然排序

标签 php mysql sorting

我想对以下数据的字母 + 字母数字值进行排序:

In-Direct Labor
Level 1
Level 10
Level 11
Level 12
Level 13
Level 14
Level 15
Level 16
Level 17
Level 2
Level 3
Level 4
Level 5
Level 6
Level 7
Level 8
Level 9
Risers  Risers
Roof/Penthouse
Site

我尝试了以下解决方案,但它没有按照我想要的方式返回结果

http://www.copterlabs.com/blog/natural-sorting-in-mysql/

In-Direct Labor
Level 1
Level 2
Level 3
Level 4
Level 5
Level 6
Level 7
Level 8
Level 9
Level 10
Level 11
Level 12
Level 13
Level 14
Level 15
Level 16
Level 17
Risers  Risers
Roof/Penthouse
Site

最佳答案

可能是提取第一个词并将第二个词视为数字顺序子句:

select *
from ab
order by 
   substring(col,1, case when locate(' ',col) = 0 then 100 else locate(' ',col) end ),
   substring(col,case when locate(' ',col) = 0 then 100 else locate(' ',col) end ) + 0;

-- col contains your field.

+-----------------+
| col             |
+-----------------+
| In-Direct Labor |
| Level 1         |
| Level 2         |
| Level 3         |
| Level 4         |
| Level 5         |
| Level 6         |
| Level 7         |
| Level 8         |
| Level 9         |
| Level 10        |
| Level 11        |
| Level 12        |
| Level 13        |
| Level 14        |
| Level 15        |
| Level 16        |
| Level 17        |
| Risers  Risers  |
| Roof/Penthouse  |
| Site            |
+-----------------+
21 rows in set (0.01 sec)

关于php - MySQL 字母数字值的自然排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23967185/

相关文章:

linq - Asp.net Core 5.0 Linq Take(1).ElementAt(index)

java - 在升序数组中对数组进行排序

php - 使用 foreach 在 MySQL 中存储数组项

php - MySQL - 如何连接两个表而不重复?

php - 使用 php 和 Mysql 更改 Strftime 日期

mysql - 将图像插入MYSQL表的BLOB字段

php - 如何使用正则表达式和 PHP 验证域名?

php - Laravel View Composer "Use of undefined constant"

mysql - 每天按 ID 顺序查询一次 SQL 查询

c - 从二进制文件读取结构时出现问题