最好有一个标题前缀字段,其中包含您不希望考虑按字母顺序排列的条目,如The、A、An 等。此处提到的其他建议可能有效,但是它们不允许使用索引进行排序,如果您有大量行,这对您的应用程序来说可能是非常有问题的。在这种情况下,查询可能看起来像
SELECT CONCAT(title_prefix, title) AS `full_title`, ...
FROM table
ORDER BY title ASC
修改现有表格以适应这种方法很简单。只需添加名称列,然后运行一些更新,例如
UPDATE table SET title_prefix = 'The ', title = SUBSTR(title, 4) WHERE title LIKE 'The %';
UPDATE table SET title_prefix = 'A ', title = SUBSTR(title, 2) WHERE title LIKE 'A %';
UPDATE table SET title_prefix = 'An ', title = SUBSTR(title, 3) WHERE title LIKE 'An %';
即使您不想要单独的字段,也可以使用类似的更新逻辑将前缀移动到标题名称的末尾,如下所示
UPDATE table SET title = CONCAT(SUBSTR(title, 4), 'The, ') WHERE title LIKE 'The %';
etc.
无论哪种方式都可以让您按title 排序,同时还可以使用索引。