【问题标题】:How Sorting Data With Underscore In Mysql [duplicate]如何在Mysql中使用下划线对数据进行排序[重复]
【发布时间】:2019-11-22 01:18:32
【问题描述】:

包含在下划线中的数据如何排序?

说明在图片上,

感谢您的帮助。

【问题讨论】:

  • 数字可以是anny number吗?那么ABC_1_1 也可以是ABC_100_1000 吗?数字的最大数量总是2吗?
  • 请把你的例子放在你的问题中,不要使用外部图片
  • 提示:在这个网站上研究如何使用嵌套的 SUBSTRING_INDEX 函数拆分字符串并使用 CAST 将其转换为 int .. 然后你可以简单地对这些数字使用 ORDER BY .. 至少如果你正在寻找仅适用于 MySQL 方法。
  • 从技术上讲,它正确排序-您正在对字符串进行排序,因此10 位于2 之前。您最好更改您的数据库表以添加一个整数类型的 priority 列并对其进行排序。
  • “你最好改变你的数据库表以添加一个整数类型的优先级列并对其进行排序。” @CD001 最有可能,但我们没有知道 topicstarters 用户案例.. topicstarter 请记住,添加“排序”列仅在您只需要处理需要排序的一个“组”时才真正起作用...

标签: php mysql


【解决方案1】:

你想要一个自然的排序。

<?php

$items =
[
'ABC_1_1',
'ABC_1_3',
'ABC_1_10',
'ABC_1_11',
'ABC_1_5',
'ABC_1_7'
];

sort($items, SORT_NATURAL);
var_dump($items);

输出:

array(6) {
    [0]=>
    string(7) "ABC_1_1"
    [1]=>
    string(7) "ABC_1_3"
    [2]=>
    string(7) "ABC_1_5"
    [3]=>
    string(7) "ABC_1_7"
    [4]=>
    string(8) "ABC_1_10"
    [5]=>
    string(8) "ABC_1_11"
  }

【讨论】:

    【解决方案2】:

    你可以试试下面-

    select id_code
    from tablename
    order by 
    substring_index(substring_index(id_code,'_',-2),'_',1),substring_index(id_code,'_',-1)
    

    【讨论】:

    • 不工作,有什么简单的查询吗?
    【解决方案3】:

    您可以尝试在 MYSQL 中拆分您的字符串,并按部分排序:

    SELECT SUBSTRING_INDEX(ID_DATA, '_', 1) as part1,
           SUBSTRING_INDEX(SUBSTRING_INDEX(ID_DATA, '_', 2), '_', -1) as part2,
           SUBSTRING_INDEX(ID_DATA, '_', -1) as part3,
    FROM table
    ORDER BY part1, part2, part3
    

    【讨论】:

    • 你使用的嵌套错误...见demo
    • 是的,你是对的
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 2016-08-05
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多