MySQL 自然排序(如 OSX Finder)

标签 mysql natural-sort

我已经搜索了很长时间,但我找到的解决方案并不能满足我的需要。

让我解释一下:我有一个包含数千种产品的表格,每个产品都有一个字母数字 SKU,也用于排序。 此 SKU 包括:

类别代码(可变数量的字母字符),

产品编号(整数),

产品型号变体(可选,字母字符数量可变)

例如:MANT 12 CL(不含空格)

<小时/>

现在,我需要像这样对它们进行排序(如果这些是文件名,OSX Finder 会完美地对它们进行排序):

MANT1
MANT2
MANT2C
MANT2D
MANT2W
MANT3
MANT4C
MANT9
MANT12
MANT12C
MANT12CL
MANT12P
MANT13
MANT21
MANT24
MANT24D
MANT29

当然,ORDER BY sku 显然是错误的:

MANT1
MANT12
MANT12C
MANT12CL
MANT12P
MANT13
MANT2
MANT21
MANT24
MANT24D
MANT29
MANT2C
MANT2D
MANT2W
MANT3
MANT4C
MANT9

并且 ORDER BY LENGTH(sku), sku 在对模型变体进行排序时出现问题:

MANT1
MANT2
MANT3
MANT9
MANT12
MANT13
MANT21
MANT24
MANT29
MANT2C
MANT2D
MANT2W
MANT4C
MANT12C
MANT12P
MANT24D
MANT12CL

那么,有没有一种方法可以像 Finder 那样对这些内容进行排序?

(此外,一旦排序,有没有办法获得下一个和上一个产品?我不介意使用多个查询:此时优雅是我的最后一个问题......)

提前感谢大家。

<小时/>

最后一件事:在我的搜索过程中,我发现 this answer to a similar question 但我不知道如何在 PHP 中使用它,所以我不知道它是否有效并且实际上是我问题的答案。

最佳答案

您在获取数据时使用 PHP 吗?

如果是这样,请尝试使用 natural sort function数据加载后在内存中排序?

关于MySQL 自然排序(如 OSX Finder),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15547800/

相关文章:

groovy - Groovy 中按自然顺序对列表进行排序

bash - 替换找到的第一个文件中的字符串

mysql - MemSQL - 在创建表时同时将代理键作为主键和不同的唯一键

javascript - 如何在 JS 甘特图中实现 MYSQL 数据获取?

php - 如何在php表单中显示获取的结果?

php对mysql选择行进行自然顺序排序

mysql - 如何对 “X-Y” 字符串数据进行自然排序,先按 X,然后按 Y?

sql - 以类似 Excel 的方式在 MySQL 中对 varchar 列进行排序

PHP mysql_query() 使用连接进行选择

java - 如果日期值存储在变量中,那么从两个日期之间的数据库中检索数据的 sql 查询是什么?