【问题标题】:Sorting mysql array value after string chars swapped from fetched DB data从获取的数据库数据交换字符串字符后对mysql数组值进行排序
【发布时间】:2011-02-20 08:55:30
【问题描述】:

我想对从 mysql DB 中提取的一列进行排序,并将其存储在一个数组中。获取后我正在执行以下步骤。

  1. DB 获取行格式的字段数组。 ->字段1、字段2、字段3、字段4、字段5
  2. 从该字段数组一列数据 [Field3],交换字符串关键字。 例如。
    AB013, DB131, RS001
    应该变成:
    013AB, 131DB, 001RS

现在我想以新的字符串格式对上面的值进行排序 喜欢-> 001RS、013AB、131DB

不是这样的,固定数字交换字符串。要再次拆分和连接字符串,有一个动态值允许获取数据字符串从给定字符位置拆分该字符串,然后使用新名称再次对其进行排序。

【问题讨论】:

    标签: mysql string sorting arrays


    【解决方案1】:

    你为什么不让数据库做这项工作(对于你的例子中的固定位置数据):

    select Field1
         , Field2
         , concat(  substr(Field3,3,3) 
                   ,substr(Field3,1,2)
                 ) as SwapedField3
         , Field4
         , Field5
    from Table
    order by SwapedField3
    

    但是,这并没有考虑拆分位置的“动态值”...

    • 该值从何而来?
    • 能不能从数据中推断出来?

    【讨论】:

    • 在我的例子中,有很多字符串格式的唯一代码,需要在列表模式下交换和重新排序。 # 现在这里唯一代码和行代码来自数据库,行代码是用于拆分唯一代码的字符串和连接字符串的参考。 # 拆分字符串char。不。值也来自数据库并与行代码参考一起存储。
    • @Shail Patel:但是如果你使用 length() 函数,你不能使用那个“行代码”来参数化“subste()”函数吗?类似substr(Field3,LineCode,length(Field3) - LineCode)
    【解决方案2】:
    select * from (
      select 
        Field1,
        Field2,
        CASE Field3
          WHEN 'AB013' THEN '013AB'
          WHEN 'DB131' THEN '131DB'
          WHEN 'RS001' THEN '001RS'
        END CASE AS NewField3,
        Field4,
        Field5 
      from Table1 
    )
    order by NewField3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多