2009-08-04 2 views
2

Я использую следующее в mysql для получения заголовков в сортировке libray, например. Крестный отец сортируется как Крестный отец.php для создания имен сортировки библиотек

SELECT apnumber, aptitle, IF (aptitle LIKE '%', SUBSTRING (aptitle, 5), IF (aptitle LIKE 'A%', SUBSTRING (aptitle, 3), IF (aptitle LIKE '%%, SUBSTRING (aptitle, 4), aptitle))) AS sorttitle и т. Д.

Какой самый эффективный способ в PHP изменить строку в отсортированную в библиотеке версию? Это отбрасывает любые «An», «A» или «The» в начале названия. Могу ли я, полагая, мне нужно смотреть на что-то вроде:

substr_replace («The», «», 0)

ответ

1

Я думаю, что вы, как правило, правильно, да. Насколько мне известно, в PHP или MySQL нет ничего, что могло бы помочь в этом типе сортировки. Реализации кода, которые я видел, все использовали набор правил замены подстрок, чтобы избавиться от нежелательных префиксов, так же, как вы предполагаете выше. Обычно preg_replace() используется, так что вы можете указать матч в начале только строки:

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

Что-то рассмотреть, если вы готовы отказаться немного дискового пространства и нормализации будет хранить второй столбец что-то вроде sort_title и удалите префикс перед вставкой записей. Это позволит вам индексировать и ORDER BY на поле sort_title в MySQL и уменьшить сложность ваших заявлений SELECT.

Как другой в стороне, это было бы отличным расширением для написания для PHP!

+0

Спасибо ... Я действительно начал использовать инструкцию mysql выше, чтобы заполнить некоторые старые таблицы ... теперь на функцию, чтобы сделать это прямо из PHP! – Ian

+0

Сохраняет ли шаблон поиска в preg_replace OR'ing || ? Удивление, если это можно сделать только в одной строке preg_repalce ... – Ian

+0

Да, 'preg_replace' использует обычный синтаксис регулярных выражений, поэтому ORs поддерживаются с помощью символа одного канала. Вы можете сделать что-то вроде 'preg_replace ("/^ (The | A | An |)/", '', $ title, 1)'. – zombat

 Смежные вопросы

  • Нет связанных вопросов^_^