Это могло бы немного отличаться от того, что было отправлено до сих пор и не может быть точно, что Вы ищете, но я думал, что добавлю его, если ни для чего иного кроме другого подхода. Я пошел с объектно-ориентированным подходом. То, что я сделал, было, создают систему, которая инкапсулирует файлы языка в класс путем хранения их в массиве строки => пары перевода. Доступ к переводу через названный метод, переводят со строкой ключа в качестве параметра. Расширяющиеся классы наследовали массив языка родителя и могут добавить к нему или перезаписать его. Поскольку классы расширяемы, можно изменить базовый класс и иметь изменения, распространяют через детей, делая более удобным в сопровождении, чем массив отдельно. Плюс, Вы только называете классы, в которых Вы нуждаетесь.
Лучше всего иметь для этого вычисляемый столбец, чтобы вы могли индексировать вычисляемый столбец и упорядочивать по нему. В противном случае сортировка потребует много работы.
Итак, вы можете иметь свой вычисляемый столбец как:
CASE WHEN title LIKE 'The %' THEN stuff(title,1,4,'') + ', The' ELSE title END
Изменить: Если STUFF недоступен в MySQL, то используйте RIGHT или SUBSTRING, чтобы удалить первые 4 символа. Но по-прежнему старайтесь использовать вычисляемый столбец, если это возможно, чтобы индексирование было лучше. Та же самая логика должна быть применима для выделения «А» и «Ан».
Роб
Что-то вроде:
ORDER BY IF(LEFT(title,2) = "A ",
SUBSTRING(title FROM 3),
IF(LEFT(title,3) = "An ",
SUBSTRING(title FROM 4),
IF(LEFT(title,4) = "The ",
SUBSTRING(title FROM 5),
title)))
Но, учитывая накладные расходы, связанные с выполнением этого более чем несколько раз, вам действительно лучше сохранить значение сортировки заголовка в другом столбце ...
Я думаю, вы могли бы сделать что-то вроде
ORDER BY REPLACE(TITLE, 'The ', '')
, хотя это заменило бы любое появление «The» на «», а не только первое «The», хотя я не думаю, что это влияют очень сильно.
Лучший способ справиться с этим - иметь столбец, содержащий значение, которое вы хотите использовать специально для упорядочивания вывода. Тогда вам просто нужно будет использовать:
SELECT t.title
FROM MOVIES t
ORDER BY t.order_title
Существуют различные правила о том, что следует и не следует использовать для упорядочивания заголовков.
На основе вашего примера альтернативой может быть использование чего-то вроде:
SELECT t.title
FROM MOVIES t
ORDER BY SUBSTR(t.title, INSTR(t.title, 'The '))
Вы можете использовать оператор CASE, чтобы содержать различные правила.
Вы, конечно, можете настроить динамическое удаление 'The', хотя вскоре вы обнаружите, что вам придется иметь дело с 'A' и 'An' (за исключением особого случая заголовков типа «A означает Алиби»). Когда в микс входят «иностранные» фильмы, вам нужно будет справиться с «Эль» и «Ла» (за исключением этого надоедливого крайнего случая «LA Story»). Затем добавьте несколько немецких фильмов, и вам нужно будет справиться с «Der» и «Die» (за исключением этого надоедливого набора крайних случаев «Крепкий орешек»). Видите узор? Вы идете по пути, который становится все длиннее и изобилует особыми случаями.