1

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

SELECT * FROM resource ORDER BY title ASC 

并希望按字母顺序对它们进行排序,忽略开头的“the”。像(来自另一个问题):

  • 土豚
  • 甲虫
  • 海狸鼠

显示为:

  • 土豚
  • 甲虫
  • 海狸鼠

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

如果没有简单的答案,那就不重要了——对我的用户来说,这只是一个“恩典笔记”:)

4

2 回答 2

4

怎么样:

order by (case when title like 'The %' then substring(title, 5, 1000) else title end)
于 2013-04-16T18:59:06.987 回答
0

您可以为“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
于 2013-04-16T19:05:01.807 回答