2015-06-25 3 views
0

У меня есть данные, хранящиеся в формате, разделенном запятыми, и я хотел бы запустить запрос, чтобы пользователи упорядочивались по второму значению в столбце.Заказ по определенному индексу разделенного запятой списка

Так что для этих данных выборки:

user  | Data 
________________________________________ 
player1 | 45471,2529,32196008193896,99 
admin  | 1136,2595,17760808279311,95 
gamer  | 13495,2432,32196008193896,98 
________________________________________ 

заказ был бы (2595-2529-2432), который администратор => player1 => геймером.

+0

Я настоятельно рекомендую не хранить списки с разделителями. См. Этот вопрос: http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad – AdamMc331

+0

НЕТ, нет способа, подумайте о нормализации своего стол сначала. – Rahul

ответ

0

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

Однако вы можете написать запрос для анализа второго значения с помощью функции SUBSTRING_INDEX(). Эта функция принимает строку, символ разделителя и целое число, независимо от того, следует ли брать левый/правый разделитель и сколько. Другими словами, чтобы получить все, что осталось от второй запятой, она будет выглядеть следующим образом:

SELECT SUBSTRING_INDEX(data, ',', 2) 
FROM myTable; 

Затем из этой строки, вы хотите, чтобы все справа от первой запятой, так что вы должны будете гнездо функции. (Обратите внимание, что это может повредить эффективность, но это падение разделителями списков):

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data, ',', 2), ',', -1) 
FROM myTable; 

Тогда вы можете просто упорядочить по этому значению:

SELECT * 
FROM myTable 
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(data, ',', 2), ',', -1) DESC; 

Вот SQL Fiddle пример.

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