Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用​的自然排序;仅MySQL_Php_Mysql - Fatal编程技术网

Php 使用​的自然排序;仅MySQL

Php 使用​的自然排序;仅MySQL,php,mysql,Php,Mysql,我需要你的帮助​​. 我们​是​为客户开发一个电子商务项目​ 现在我们需要使用MySQL中的自然排序对产品进行排序。​​ (​​我们不能这样做​ 用PHP实现数组排序​ 利用​纳索特,​​因为我们使用的是延迟加载,所以只能对MySQL中的数据进行排序) ​需要类似以下示例的解决方案(但来自MySQL)​ 。​​natsort.php​ 为了更清楚:这是我想要排序的原始数据 INSERT INTO `sample` (`id`, `data`) VALUES (1, 'MLB-1.0-6.0-2.

我需要你的帮助​​.

我们​是​为客户开发一个电子商务项目​ 现在我们需要使用MySQL中的自然排序对产品进行排序。​​ (​​我们不能这样做​ 用PHP实现数组排序​ 利用​纳索特,​​因为我们使用的是延迟加载,所以只能对MySQL中的数据进行排序)

​需要类似以下示例的解决方案(但来自MySQL)​

。​​natsort.php​

为了更清楚:这是我想要排序的原始数据

INSERT INTO `sample` (`id`, `data`) VALUES (1, 'MLB-1.0-6.0-2.5'), (2, 'MLB-1.0-6.0-3'), (3, 'MLB-1.0-7.0-2'), (4, 'MLB-1.0-7.0-2.5'), (5, 'MLB-1.0-7.0-3'), (6, 'MLB-1.0-9.0-2.5'), (7, 'MLB-1.0-10.0-2'), (8, 'MLB-1.0-10.0-2.5'), (9, 'MLB-1.0-8.0-3'), (10, 'MLB-1.0-9.0-2.5'), (11, 'MLB-1.0-10.0-2'), (12, 'MLB-1.0-10.0-2.5'), (13, 'MLB-1.0-10.0-3'), (14, 'MLB-1.0-12.0-2.5'), (15, 'MLB-1.0-12.0-3'), (16, 'MLB-1.2-10.0-2'), (17, 'MLB-1.2-10.0-3'), (18, 'MLB-1.2-10.0-4'), (19, 'MLB-1.2-10.0-5'), (20, 'MLB-1.2-11.2-2'), (21, 'MLB-1.2-11.2-3'), (22, 'MLB-1.2-11.2-4'), (23, 'MLB-1.2-12.0-2'), (24, 'MLB-1.2-12.0-2.5'), (25, 'MLB-1.2-12.0-3'), (26, 'MLB-1.2-12.0-4'), (27, 'MLB-1.2-12.0-5'), (28, 'MLB-1.2-12.0-6'), (29, 'MLB-1.2-12.0-8'), (30, 'MLB-1.2-12.7-3'), (31, 'MLB-1.2-14.0-2.5'), (32, 'MLB-1.2-14.0-3'), (33, 'MLB-1.2-4.0-2.5'), (34, 'MLB-1.2-4.0-3'), (35, 'MLB-1.2-5.0-2'), (36, 'MLB-1.2-5.0-2.5'), (37, 'MLB-1.2-5.0-3'), (38, 'MLB-1.2-6.0-2'), (39, 'MLB-1.2-6.0-2.5'), (40, 'MLB-1.2-14.0-4'), (41, 'MLB-1.2-14.0-5'), (42, 'MLB-1.2-16.0-3'), (43, 'MLB-1.2-16.0-4'), (44, 'MLB-1.2-16.0-5'), (45, 'MLB-1.2-19.0-3'), (46, 'MLB-1.2-19.0-4'), (47, 'MLB-1.2-22.0-3'), (48, 'MLB-1.2-22.0-4'), (49, 'MLB-1.2-6.0-3'), (50, 'MLB-1.2-6.0-4'), (51, 'MLB-1.2-6.0-5'), (52, 'MLB-1.2-6.0-6'), (53, 'MLB-1.2-7.0-2'), (54, 'MLB-1.2-7.0-2.5'), (55, 'MLB-1.2-7.0-3'), (56, 'MLB-1.2-7.0-4'), (57, 'MLB-1.2-8.0-2'), (58, 'MLB-1.2-8.0-2.5'), (59, 'MLB-1.2-8.0-2/2.5B'), (60, 'MLB-1.2-8.0-3'), (61, 'MLB-1.2-8.0-4'), (62, 'MLB-1.2-8.0-5'), (63, 'MLB-1.2-8.0-6'), (64, 'MLB-1.2-8.0-8'), (65, 'MLB-1.2-9.0-2'), (66, 'MLB-1.2-9.0-2.5'), (67, 'MLB-1.2-9.0-3'), (68, 'MLB-1.2-9.0-4'); 插入到'sample'('id','data`)值中 (1,“MLB-1.0-6.0-2.5”), (2,“MLB-1.0-6.0-3”), (3,“MLB-1.0-7.0-2”), (4,“MLB-1.0-7.0-2.5”), (5,“MLB-1.0-7.0-3”), (6,“MLB-1.0-9.0-2.5”), (7,“MLB-1.0-10.0-2”), (8,'MLB-1.0-10.0-2.5'), (9,“MLB-1.0-8.0-3”), (10,'MLB-1.0-9.0-2.5'), (11,“MLB-1.0-10.0-2”), (12,'MLB-1.0-10.0-2.5'), (13,“MLB-1.0-10.0-3”), (14,“MLB-1.0-12.0-2.5”), (15,“MLB-1.0-12.0-3”), (16,“MLB-1.2-10.0-2”), (17,“MLB-1.2-10.0-3”), (18,“MLB-1.2-10.0-4”), (19,“MLB-1.2-10.0-5”), (20,“MLB-1.2-11.2-2”), (21,“MLB-1.2-11.2-3”), (22,“MLB-1.2-11.2-4”), (23,“MLB-1.2-12.0-2”), (24,“MLB-1.2-12.0-2.5”), (25,“MLB-1.2-12.0-3”), (26,“MLB-1.2-12.0-4”), (27,“MLB-1.2-12.0-5”), (28,“MLB-1.2-12.0-6”), (29,“MLB-1.2-12.0-8”), (30,“MLB-1.2-12.7-3”), (31,“MLB-1.2-14.0-2.5”), (32,“MLB-1.2-14.0-3”), (33,“MLB-1.2-4.0-2.5”), (34,“MLB-1.2-4.0-3”), (35,“MLB-1.2-5.0-2”), (36,“MLB-1.2-5.0-2.5”), (37,“MLB-1.2-5.0-3”), (38,“MLB-1.2-6.0-2”), (39,“MLB-1.2-6.0-2.5”), (40,“MLB-1.2-14.0-4”), (41,“MLB-1.2-14.0-5”), (42,“MLB-1.2-16.0-3”), (43,“MLB-1.2-16.0-4”), (44,“MLB-1.2-16.0-5”), (45,'MLB-1.2-19.0-3'), (46,“MLB-1.2-19.0-4”), (47,“MLB-1.2-22.0-3”), (48,“MLB-1.2-22.0-4”), (49,“MLB-1.2-6.0-3”), (50,“MLB-1.2-6.0-4”), (51,“MLB-1.2-6.0-5”), (52,“MLB-1.2-6.0-6”), (53,“MLB-1.2-7.0-2”), (54,“MLB-1.2-7.0-2.5”), (55,“MLB-1.2-7.0-3”), (56,“MLB-1.2-7.0-4”), (57,“MLB-1.2-8.0-2”), (58,“MLB-1.2-8.0-2.5”), (59,“MLB-1.2-8.0-2/2.5B”), (60,'MLB-1.2-8.0-3'), (61,“MLB-1.2-8.0-4”), (62,“MLB-1.2-8.0-5”), (63,“MLB-1.2-8.0-6”), (64,“MLB-1.2-8.0-8”), (65,“MLB-1.2-9.0-2”), (66,“MLB-1.2-9.0-2.5”), (67,“MLB-1.2-9.0-3”), (68,“MLB-1.2-9.0-4”); 这是我排序后的预期结果:

MLB-1.0-6.0-2.5 MLB-1.0-6.0-3 MLB-1.0-7.0-2 MLB-1.0-7.0-2.5 MLB-1.0-7.0-3 MLB-1.0-8.0-2 MLB-1.0-8.0-2.5 MLB-1.0-8.0-3 MLB-1.0-9.0-2.5 MLB-1.0-10.0-2 MLB-1.0-10.0-2.5 MLB-1.0-10.0-3 MLB-1.0-12.0-2.5 MLB-1.0-12.0-3 MLB-1.2-4.0-2.5 MLB-1.2-4.0-3 MLB-1.2-5.0-2 MLB-1.2-5.0-2.5 MLB-1.2-5.0-3 MLB-1.2-6.0-2 MLB-1.2-6.0-2.5 MLB-1.2-6.0-3 MLB-1.2-6.0-4 MLB-1.2-6.0-5 MLB-1.2-6.0-6 MLB-1.2-7.0-2 MLB-1.2-7.0-2.5 MLB-1.2-7.0-3 MLB-1.2-7.0-4 MLB-1.2-8.0-2 MLB-1.2-8.0-2.5 MLB-1.2-8.0-2/2.5B MLB-1.2-8.0-3 MLB-1.2-8.0-4 MLB-1.2-8.0-5 MLB-1.2-8.0-6 MLB-1.2-8.0-8 MLB-1.2-9.0-2 MLB-1.2-9.0-2.5 MLB-1.2-9.0-3 MLB-1.2-9.0-4 MLB-1.2-10.0-2 MLB-1.2-10.0-2.5 MLB-1.2-10.0-3 MLB-1.2-10.0-4 MLB-1.2-10.0-5 MLB-1.2-11.2-2 MLB-1.2-11.2-3 MLB-1.2-11.2-4 MLB-1.2-12.0-2 MLB-1.2-12.0-2.5 MLB-1.2-12.0-3 MLB-1.2-12.0-4 MLB-1.2-12.0-5 MLB-1.2-12.0-6 MLB-1.2-12.0-8 MLB-1.2-12.7-3 MLB-1.2-14.0-2.5 MLB-1.2-14.0-3 MLB-1.2-14.0-4 MLB-1.2-14.0-5 MLB-1.2-16.0-3 MLB-1.2-16.0-4 MLB-1.2-16.0-5 MLB-1.2-19.0-3 MLB-1.2-19.0-4 MLB-1.2-22.0-3 MLB-1.2-22.0-4 MLB-1.0-6.0-2.5 MLB-1.0-6.0-3 MLB-1.0-7.0-2 MLB-1.0-7.0-2.5 MLB-1.0-7.0-3 MLB-1.0-8.0-2 MLB-1.0-8.0-2.5 MLB-1.0-8.0-3 MLB-1.0-9.0-2.5 MLB-1.0-10.0-2 MLB-1.0-10.0-2.5 MLB-1.0-10.0-3 MLB-1.0-12.0-2.5 MLB-1.0-12.0-3 MLB-1.2-4.0-2.5 MLB-1.2-4.0-3 MLB-1.2-5.0-2 MLB-1.2-5.0-2.5 MLB-1.2-5.0-3 MLB-1.2-6.0-2 MLB-1.2-6.0-2.5 MLB-1.2-6.0-3 MLB-1.2-6.0-4 MLB-1.2-6.0-5 MLB-1.2-6.0-6 MLB-1.2-7.0-2 MLB-1.2-7.0-2.5 MLB-1.2-7.0-3 MLB-1.2-7.0-4 MLB-1.2-8.0-2 MLB-1.2-8.0-2.5 MLB-1.2-8.0-2/2.5B MLB-1.2-8.0-3 MLB-1.2-8.0-4 MLB-1.2-8.0-5 MLB-1.2-8.0-6 MLB-1.2-8.0-8 MLB-1.2-9.0-2 MLB-1.2-9.0-2.5 MLB-1.2-9.0-3 MLB-1.2-9.0-4 MLB-1.2-10.0-2 MLB-1.2-10.0-2.5 MLB-1.2-10.0-3 MLB-1.2-10.0-4 MLB-1.2-10.0-5 MLB-1.2-11.2-2 MLB-1.2-11.2-3 MLB-1.2-11.2-4 MLB-1.2-12.0-2 MLB-1.2-12.0-2.5 MLB-1.2-12.0-3 MLB-1.2-12.0-4 MLB-1.2-12.0-5 MLB-1.2-12.0-6 MLB-1.2-12.0-8 MLB-1.2-12.7-3 MLB-1.2-14.0-2.5 MLB-1.2-14.0-3 MLB-1.2-14.0-4 MLB-1.2-14.0-5 MLB-1.2-16.0-3 MLB-1.2-16.0-4 MLB-1.2-16.0-5 MLB-1.2-19.0-3 MLB-1.2-19.0-4 MLB-1.2-22.0-3 MLB-1.2-22.0-4 下面的解决方案已尝试​:​


请建议使用MySQL解决此问题。

根据您发布的数据,我认为这将有助于:

SELECT *
FROM sample 
ORDER BY CAST(SUBSTRING(SUBSTRING_INDEX(`data`, '-', 2), 5) AS double),
    CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, '-', 3), '-', -1) AS double),
    SUBSTRING_INDEX(`data`, '-', -1);
查询所做的是使用
'-'
作为分隔符拆分数据列,并提取数字部分,即从
''MLB-1.2-4.0-2.5'
提取
1.2
4.0
2.5
,将它们转换为双精度(最后一个块除外)并根据它们对数据进行排序。

基于此,并假设
data
列将采用您发布的格式(一个以3个破折号作为分隔符的字符串)


为好人提供db模式和预期结果。我们需要类似于此示例的解决方案,但需要MySQL。​​natsort.php​
select *,SUBSTRING_INDEX(SUBSTRING_INDEX(data,"-",3),"-",-1) as mystring from sample ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(data,"-",2),"-",-1)+0, SUBSTRING_INDEX(SUBSTRING_INDEX(data,"-",3),"-",-1)+0, SUBSTRING_INDEX(data,"-",-1);