【问题标题】:Sort list alphabetically ignoring "the"按字母顺序排序列表,忽略“the”
【发布时间】:2013-04-16 18:40:56
【问题描述】:

我觉得这个问题没有简单的答案,但无论如何都可以。我正在将 Codeigniter 与 MySQL 一起使用。我使用如下查询从数据库中提取资源标题列表:

SELECT * FROM resource ORDER BY title ASC 

并希望按字母顺序对它们进行排序,忽略开头的“the”。类似于(来自another question):

  • 土豚
  • 甲虫
  • 海狸鼠

显示为:

  • 土豚
  • 甲虫
  • 海狸鼠

One answer 提出了一些可能存在的混乱 SQL,但我想为此获得一个通用算法,我可以将其应用于所有项目,因为这是一个常见问题。

如果没有简单的答案,那么它并不重要——它只是对我的用户的“恩典笔记”:)

【问题讨论】:

    标签: sql codeigniter sorting alphabetical


    【解决方案1】:

    怎么样:

    order by (case when title like 'The %' then substring(title, 5, 1000) else title end)
    

    【讨论】:

    • 谢谢,Gordon,解决了这个问题。我对 SQL 函数不是很熟悉,只是偶尔使用一些,但是看看 MySQL 手册下的函数 (dev.mysql.com/doc/refman/5.5/en/functions.html) 可以让我理解你做了什么。当您知道如何操作时非常简单:)
    【解决方案2】:

    您可以为“title”创建一个重复的列,然后从该列中删除所有“the”。

    首先更新表格以复制“标题”列

    ALTER TABLE resource
    ADD title_less_the varchar(50) (same as title)
    
    UPDATE resource
    SET title_less_the = title
    
    update resource (
    set title_less_the = replace(title_less_the, 'the ', '')
    

    然后,当您搜索类似这样的内容时,会忽略已修改的列:

    SELECT column1, column2, column3 FROM resource
    ORDER BY title_less_the ASC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      相关资源
      最近更新 更多