2015-01-22 3 views
2

Как я могу объединить имена, упорядоченные по их последовательности в наборе (это переменная, где у меня есть идентификаторы запятой, разделенные как «4,3,2»)? Пока имена упорядочиваются по идентификатору «2,3,4». Это мой подзапрос.Порядок по последовательности значений в наборе

SELECT GROUP_CONCAT(t.name SEPARATOR ',') FROM table t WHERE find_in_set(t.id, "4,3,2") > 0 
+0

Сохранение 'id' в качестве CSV очень плохой дизайн базы данных. – Jens

+0

Это, но на этот раз мне это нужно –

ответ

2

Вы можете использовать order by в group_concat функции заказать имена, как и в том порядке, у вас есть идентификаторы в find_in_set, find_in_set возвращает индекс согласованного значения, как для ид => 4 индекса будет один для ид => 3 индекс будет 2, так что вы можете заказать свой результат, используя результат find_in_set

SELECT 
GROUP_CONCAT(t.name ORDER BY FIND_IN_SET(id, "4,3,2") SEPARATOR ',') 
FROM t 
WHERE FIND_IN_SET(t.id, "4,3,2") > 0 

DEMO

+1

Это то, что мне нужно. Спасибо за решение –

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

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