Сортировать запрос на основе пропущенных слов - PullRequest
0 голосов
/ 26 октября 2010

если у меня есть следующие наборы результатов:

id, name 
1, The Popper
2, Brittany
3, Fledgler
4, The Nightingale

Как мне отсортировать их по имени, чтобы оно игнорировало слово "The" и сортировало их следующим образом:

id, name
1, Britanny
2, Fledler
3, The Nightingale
4, The Popper

Спасибо заранее. Я использую MySQL

Ответы [ 4 ]

3 голосов
/ 26 октября 2010

Попробуйте:

SELECT id, name
FROM myTable
ORDER BY TRIM(LEADING 'The ' FROM name)

Подробнее здесь .

1 голос
/ 26 октября 2010

Есть несколько ответов, которые предлагают «живую» обрезку, которая будет работать нормально.

Однако, если производительность важна ( огромный много строк), рассмотрите возможность использования отдельного столбца title_sort, который содержит заголовок с The и другими уже проигнорированными словами.

Таким образом, ядро ​​базы данных может полностью использовать индексирование и другие оптимизации.

1 голос
/ 26 октября 2010
 SELECT id,title,
    CASE WHEN LOWER(SUBSTRING_INDEX(Title, ' ', 1))
            IN ('a', 'an', 'the')
        THEN CONCAT(
            SUBSTRING(Title, INSTR(Title, ' ') + 1),
            ', ',
            SUBSTRING_INDEX(Title, ' ', 1)
        )
        ELSE Title
    END AS TitleSort
FROM books
ORDER BY TitleSort
0 голосов
/ 26 октября 2010

Используйте это -> http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim, чтобы убрать "The" из начала ключевого слова в предложении Order by.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...