MySQL: сортування значень GROUP_CONCAT


182

Коротше кажучи: чи є спосіб сортування значень у операторі GROUP_CONCAT?

Запит:

GROUP_CONCAT((SELECT GROUP_CONCAT(parent.name SEPARATOR " » ") 
FROM test_competence AS node, test_competence AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
  AND node.id = l.competence 
  AND parent.id != 1 
ORDER BY parent.lft) SEPARATOR "<br />\n") AS competences

Я отримую цей ряд:

Ремесла »Столярні вироби

Адміністрація »Організація

Я хочу так:

Адміністрація »Організація

Ремесла »Столярні вироби


Відповіді:


389

Звичайно, див. Http://dev.mysql.com/doc/refman/…tions.html#function_group-concat :

SELECT student_name,
  GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')
  FROM student
  GROUP BY student_name;

Ваш код в значній мірі покладається на вашу конкретну відповідь, і тому його не слід розміщувати ніде, окрім оригінальної публікації. Якщо ви помістите це в цьому коментарі, багато програмістів тут його не побачать, і ви не отримаєте найкращої можливої ​​відповіді :)
Sampson

Сумно але правда. :) Чи достатньо цього коду чи я повинен написати весь запит?
Івар

Ви пробували ASC замість DESC?
Сампсон

Я не використовував жодного з них (ASC = за замовчуванням).
Івар

10
Я не знав, що ти зможеш order byпротягом group_concatцього точного моменту. Вирішує проблему, яка у мене була. Дякую!
DiMono

22

Ви маєте на увазі замовити?

SELECT _key,            
COUNT(*) as cnt,            
GROUP_CONCAT(_value ORDER BY _value SEPARATOR ', ') as value_list      
FROM group_concat_test      
GROUP BY _key      
ORDER BY _key;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.