2009-11-27 4 views
3

ли ИК можно отсортировать колонки по алфавиту, но игнорируя некоторые слова, как например «The»MySQL сортировать по имени

например

Нормальный запрос возвратит

string 1 
string 3 
string 4 
the string 2 

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

string 1 
the string 2 
string 3 
string 4 

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

EDIT Обратите внимание, что я ищу, чтобы заменить несколько слов, таких как A, A и т. Д. Это можно сделать?

ответ

5

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

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

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

IMO вам лучше с отдельной колонкой с индексом на ней.

Для множественных стоп-слов просто держите гнездо REPLACE. :)

0

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

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

Возможно, вы захотите добавить конечное пространство, иначе это может вызвать некоторые проблемы со словами, содержащими «the», например. перо –

+0

@astander: Хорошая идея, спасибо. – Bobby

0

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

SELECT * 
FROM YourTable 
ORDER BY REPLACE(Val,'The ', '') 
0

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

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