我需要按字符串排序,但考虑的字符串介于2“/”或2“-”之间,如何做到这一点

ippsafx7  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(252)

表中的当前数据如下所示

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

我该怎么做??

wvt8vs2t

wvt8vs2t1#

按上述方式订购
按转换顺序(子字符串索引(子字符串索引(fieldname,“/”,2),“/”,-1),无符号整数)
它将返回整数形式的中间值,然后我们可以对其排序

cyvaqqii

cyvaqqii2#

只需从表中获取作为数组的数据,并使用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);
?>
q35jwt9p

q35jwt9p3#

我希望它能帮助你我假设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);
czfnxgou

czfnxgou4#

一个查询解决方案是一个很好的方法,如果你能弄清楚怎么做的话,它可能是首选的方法。然而,没有更多的信息,这里是一个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
)

相关问题