要按名称订购,我正在使用'order by name
'
但名称包含双冒号:'::'
如何按双冒号后面的文本排序?
所以 :
aaaa::bbbb
aaaa::aaaa
aaaa::1234
aaaa::a1234
将被订购:
aaaa::1234
aaaa::aaaa
aaaa::a1234
aaaa::bbbb
您必须在 MySQL 中创建一个新字段,然后将文本的第二部分插入其中。排序方式使用各种索引和算法(例如分治法)。
因此,它不适用于对特定字符串的特定部分进行排序,并且如果您确实设法“伪造”了一种这样做的方式,那么由于缺少索引,性能会很糟糕。
抱歉,我意识到这可能不是您要寻找的答案,但恐怕最好的方法是稍微长一点的方法,但是如果您向其中添加索引,至少您可以以极快的速度进行操作:)
您必须将文本分成两列并按后一列排序。您可以在应用程序代码中拆分和连接列,也可以使用视图和存储过程使其看起来像数据库客户端的一列。
您可以尝试以下方法
获取所有数据为字母的所有记录::
联盟
获取所有数据在 :: 之后为数字的所有记录
关于您的排序,根据 ascii 值,数字排在字母之前,所以 aaaa:1234 应该排在第一位
您可以在 PHP 中检索值和排序
<?php
$arr = array("aaaa::bbbb","aaaa::aaaa","aaaa::1234","aaaa::a1234");
$sec=$arr;
natsort($sec);
print_r ($sec);
?>