2

我在 mysql 中使用以下内容来获取库排序中的标题,例如教父被排序为教父。

选择 aptitle, aptitle, IF( aptitle LIKE 'The %', SUBSTRING( aptitle, 5 ) , IF( aptitle LIKE 'A %', SUBSTRING( aptitle, 3 ) , IF( aptitle LIKE 'An %', SUBSTRING( aptitle, 4 ) , aptitle ) ) ) AS sorttitle 等...

PHP中将字符串更改为库排序版本的最有效方法是什么?那就是在标题的开头删除任何“An”、“A”或“The”。我是否正确假设我需要查看以下内容:

substr_replace("", "", 0)

4

1 回答 1

1

我认为您通常是正确的,是的。据我所知,PHP 或 MySQL 都没有内置任何东西来帮助这种类型的排序。正如您在上面假设的那样,我见过的代码实现都使用了一组子字符串替换规则来消除不需要的前缀。通常preg_replace()使用,以便您可以仅在字符串的开头指定匹配项:

preg_replace("/^The /",'',$title,1);

如果您愿意放弃一点磁盘空间和规范化,需要考虑的事情是存储第二个名为 的列sort_title,并在插入记录之前删除前缀。这将允许您在 MySQLORDER BY中对sort_title字段进行索引,并降低SELECT语句的复杂性。

另外,这将是为 PHP 编写的一个很好的扩展!

于 2009-08-04T21:32:53.077 回答