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этого точного момента. Решает проблему, которая у меня была. Спасибо!
Димоно

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.