对于这类问题,我正在寻找MySQL和PostgreSQL的解决方案。
假设我有许多具有title字段的记录。书名可以是书名或电影名,比如“戴帽子的猫”和“罗宾汉”。但是,虽然标题必须以原始形式显示,但它们应该按照图书馆对其进行排序的方式进行排序,即将任何文章移动到标题的末尾。
因此,“戴帽子的猫”的排序就好像它是“戴帽子的猫,”。
设计模式或编写查询以使这些记录按标题排序的最佳方式与库对标题排序的方式相同?(我也希望我知道这种按标题排序的技术术语。)另外,我应该注意哪些性能注意事项,应该创建哪些索引?
发布于 2011-04-01 03:25:48
创建一个自定义函数(sortableTitle,也许?)这将修改以您不想要的单词开头的字符串。使用order by sortableTitle(title)结束查询语句。这将导致额外的CPU成本,尽管您必须进行基准测试才能知道有多大。
您可以创建一个额外的列(sortTitle),该列由触发器填充。这将占用一些空间,但是这样您的服务器就能够按索引对行进行排序。
除上述情况外,您不能(不修改数据库服务器代码)直接按您希望的顺序创建索引。据我所知,这适用于MySQL和PostgreSQL。
发布于 2011-04-01 03:32:02
为什么不在表中添加一个"title_prefix“字段,并将所有这些" the”和"a“字符串移动到那里呢?当你排序时,你可以使用" title“字段,而当你展示标题时,你可以用任何你想要的方式进行连接。
发布于 2011-04-01 03:36:31
iTunes通过使用第二个字段来实现这一点,在第二个字段中,标题以所需的排序格式存储,并按该字段而不是标题进行排序。这听起来确实像是一种廉价的解决办法,但当您考虑到每次执行按标题排序的select语句时对每个标题进行字符串操作的性能影响,而不是每次插入或更新标题时进行字符串操作时,它确实是有意义的。
https://stackoverflow.com/questions/5505063
复制相似问题