【问题标题】:MySQL sort by nameMySQL 按名称排序
【发布时间】:2009-11-27 12:31:11
【问题描述】:

是否可以按字母顺序对列进行排序但忽略某些单词,例如“The”

例如

正常的查询会返回

string 1
string 3
string 4
the string 2

我想退货

string 1
the string 2
string 3
string 4

这可能吗?

编辑 请注意,我希望替换多个单词,例如 The、A 等...可以这样做吗?

【问题讨论】:

    标签: mysql sorting alphabetical alphabetized


    【解决方案1】:

    你可以试试

    SELECT id, text FROM table ORDER BY TRIM(REPLACE(LOWER(text), 'the ', ''))
    

    但请注意,对于大型数据集,它会非常慢,因为它必须为 每一 行重新计算新字符串。

    IMO 你最好用一个单独的列,上面有一个索引。

    对于多个停用词,只需继续嵌套 REPLACE 调用即可。 :)

    【讨论】:

      【解决方案2】:

      这将替换所有前导的“The”作为示例

      SELECT  *
      FROM    YourTable 
      ORDER BY REPLACE(Val,'The ', '')
      

      【讨论】:

        【解决方案3】:

        是的,应该可以使用带有 ORDER 部分的表达式:

        SELECT * FROM yourTable ORDER BY REPLACE(yourField, "the ", "")
        

        【讨论】:

        • 可能需要添加一个尾随空格,否则这可能会导致包含“the”的单词出现一些问题,例如。羽毛
        【解决方案4】:

        我有一个包含 75,000 多条记录的音乐列表,我也遇到过类似的情况。我编写了一个 PHP 脚本来检查所有以 'A'、'An' 或 'The' 开头的字符串,并从字符串中截断该部分。我还将所有大写字母转换为小写,并将该字符串存储在一个新列中。在该列上设置索引后,我就完成了。

        显然您显示了初始列,但按新创建的索引列排序。我现在一秒钟左右就能得到结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-01
          • 1970-01-01
          • 2013-07-21
          • 2018-03-26
          • 1970-01-01
          • 1970-01-01
          • 2015-05-05
          • 1970-01-01
          相关资源
          最近更新 更多