首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库中的字母数字排序/排序

数据库中的字母数字排序/排序
EN

Stack Overflow用户
提问于 2013-07-18 12:51:11
回答 5查看 1.7K关注 0票数 0

在数据库中,它存储A1、A2、A10、A12、A5、A8值,但当我检索它时,它显示如下:

A1、A10、A12、A2、A5、A8

有没有办法对它进行正确的排序?喜欢

A1、A2、A5、A8、A10、A12

EN

回答 5

Stack Overflow用户

发布于 2013-07-18 12:57:23

如果字符串始终以单个字母/数字前缀开头,则可以使用

代码语言:javascript
运行
复制
 SELECT no from my_table order by substring(no,1,1), substring(no,2)+0 

fiddle here

在PHP中,一旦进入多维数组,就可以通过使用usort对字段返回strnatcasecmp调用的结果来进行排序。

代码语言:javascript
运行
复制
usort($records, function($a, $b){return strnatcasecmp($a["fieldname"], $b["fieldname"]);});
票数 5
EN

Stack Overflow用户

发布于 2013-07-18 12:57:33

这就是所谓的natural sort, or a natural order

MySQL没有进行自然排序的内置能力。

对于这个问题,有许多不同的选项可供选择:Natural Sort in MySQL ...but没有任何东西可以轻松地实现您想要的功能。

但是,您可以做的是将所有数据返回到PHP,并在那里使用natsort()函数进行排序。

代码语言:javascript
运行
复制
$vals = array('A1', 'A10', 'A12', 'A2', 'A5', 'A8');
natsort($vals);
print_r($vals); // A1, A2, A5, A8, A10, A12

这只对单个值进行排序-但如果需要对整行进行排序,则可以通过使用带有strnatcmp()函数的usort()来实现相同的功能

请注意,这需要您获取所有的行,以便对它们进行排序-任何限制或分页都必须在中的排序之后进行,这对于大型数据集来说很快就会变得低效。

票数 2
EN

Stack Overflow用户

发布于 2013-07-18 12:58:42

如果前缀总是相似的,你可以先按长度排序吗?

代码语言:javascript
运行
复制
ORDER BY LENGTH(column), column
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17714751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档