表中当前数据如下
XBX/124/18
XX/10/18
XMX/12/18
XX/8/18
XX/123/18
XXX/88/18
XX/68/18
XX/145/18
YYY/5/18
我需要的数据应该是这种格式
XBX/5/18
XX/8/18
XMX/10/18
XX/12/18
XX/68/18
XXX/88/18
XX/123/18
XX/124/18
YYY/145/18
我该怎么做??
希望对您有所帮助 我假设 col2 是你的字符串数据就像"XBX/5/18">
SELECT
col1,
col2,
col3
FROM
table1
ORDER BY
SUBSTRING_INDEX(SUBSTRING_INDEX(col2, "/", 2),"/",-1);
这条线将帮助您获得中间数字。
SUBSTRING_INDEX(SUBSTRING_INDEX("XBX/5/18", "/", 2),"/",-1);
按上述顺序排序
按转换排序(SUBSTRING_INDEX(SUBSTRING_INDEX(字段名称, '/', 2(, '/', -1(,无符号整数(
它将返回中间值作为整数,然后我们可以对其进行排序
查询解决方案是一种很好的方法,如果您能弄清楚如何做到这一点,则可能是首选方法。 但是,无需更多信息,这里有一个PHP解决方案,可以为您提供所需的结果。
此解决方案考虑了"/"或"-",并将在排序数组中保留"/"或"-"。 它很丑陋,但它有效。
$data = array(
'XBX/124/18',
'XX/10/18',
'XMX/12/18',
'XX/8/18',
'XX-123-18',
'XXX/88/18',
'XX-68-18',
'XX-145-18',
'YYY/5/18'
);
for($i = 0; $i < count($data); $i++){
if(preg_match('///', $data[$i])){
$data[$i] = preg_replace('///', ' ', $data[$i]);
$parsed[$i] = explode(' ', $data[$i]);
$parsed[$i][3] = '/';
}elseif(preg_match('/-/', $data[$i])){
$data[$i] = preg_replace('/-/', ' ', $data[$i]);
$parsed[$i] = explode(' ', $data[$i]);
$parsed[$i][3] = '-';
}
}
$temp = $parsed;
usort($parsed, function($a, $b){ //Will sort by middle and right values.
if([$a[1], $a[2]] > [$b[1], $b[2]]){
return 1;
}elseif([$a[1], $a[2]] < [$b[1], $b[2]]){
return -1;
}else{
return 0;
}
});
for($i = 0; $i < count($parsed); $i++){
$sorted[] = $temp[$i][0] . $parsed[$i][3] . $parsed[$i][1] . $parsed[$i][3] . $parsed[$i][2];
}
echo '<pre>';
print_r($sorted);
echo '</pre>';
这将输出:
Array
(
[0] => XBX/5/18
[1] => XX/8/18
[2] => XMX/10/18
[3] => XX/12/18
[4] => XX-68-18
[5] => XXX/88/18
[6] => XX-123-18
[7] => XX/124/18
[8] => YYY-145-18
)
只需从表中获取数组中的数据,然后执行以下步骤以使用 PHP 对它们进行排序。
<?php
$arr = ['XBX/124/18', 'XX/10/18', 'XMX/12/18', 'XX/8/18', 'XX/123/18', 'XXX/88/18', 'XX/68/18', 'XX/145/18', 'YYY/5/18'];
foreach ($arr as $str){
$matches = substr($str, strpos($str, "/") + 1).'<br>';
$variable[] = substr($matches, 0, strpos($matches, "/"));
}
natsort($variable);
$variable_keys = array_keys($variable);
$ordered_array = array_replace(array_flip($variable_keys), $arr);
$ordered_array = array_values($ordered_array);
print_r($ordered_array);
?>