MySQL сортировка по имени - PullRequest
       10

MySQL сортировка по имени

3 голосов
/ 27 ноября 2009

Невозможно отсортировать столбец по алфавиту, но игнорируя некоторые слова, например, например, "The"

, например

Обычный запрос вернул бы

string 1
string 3
string 4
the string 2

Я бы хотел вернуться

string 1
the string 2
string 3
string 4

Возможно ли это?

EDIT Обратите внимание: я собираюсь заменить несколько слов, таких как The, A и т. Д. ... Можно ли это сделать?

Ответы [ 4 ]

5 голосов
/ 27 ноября 2009

Вы можете попробовать

SELECT id, text FROM table ORDER BY TRIM(REPLACE(LOWER(text), 'the ', ''))

, но обратите внимание, что для больших наборов данных это будет очень медленно, так как придется пересчитывать новую строку для каждой строки .

IMO, вам лучше с отдельным столбцом с индексом.

Для нескольких стоп-слов просто продолжайте вкладывать REPLACE звонки. :)

0 голосов
/ 27 ноября 2009

У меня есть список музыки, который содержит более 75 000 записей, и я столкнулся с подобной ситуацией. Я написал PHP-скрипт, который проверял все строки, начинающиеся с «A», «An» или «The», и урезал эту часть за пределы строки. Я также преобразовал все заглавные буквы в строчные и сохранил эту строку в новом столбце. После установки индекса для этого столбца я закончил.

Очевидно, что вы отображаете исходный столбец, но сортируете по вновь созданному проиндексированному столбцу. Я получаю результаты в секунду или около того.

0 голосов
/ 27 ноября 2009

Это заменит все ведущие "The" в качестве примера

SELECT  *
FROM    YourTable 
ORDER BY REPLACE(Val,'The ', '')
0 голосов
/ 27 ноября 2009

Да, должно быть возможно использовать выражения с частью ORDER:

SELECT * FROM yourTable ORDER BY REPLACE(yourField, "the ", "")
...