MySQL: trier les valeurs GROUP_CONCAT


182

En bref: existe-t-il un moyen de trier les valeurs dans une instruction GROUP_CONCAT?

Requete:

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

J'obtiens cette ligne:

Artisanat »Menuiserie

Administration »Organisation

Je le veux comme ça:

Administration »Organisation

Artisanat »Menuiserie


Réponses:


389

Bien sûr, voir 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;

Votre code est fortement utilisé pour votre réponse spécifique et ne doit donc pas être placé ailleurs que dans votre message d'origine. Si vous le mettez ici dans ce commentaire, de nombreux programmeurs ici ne le verront pas, et vous n'obtiendrez pas la meilleure réponse possible :)
Sampson

Triste mais vrai. :) Ce code est-il suffisant ou devrais-je écrire toute la requête?
Ivar

Avez-vous essayé ASC au lieu de DESC?
Sampson

Je n'ai utilisé aucun d'entre eux (ASC = par défaut).
Ivar

10
Je ne savais pas que vous pouviez order bydans un délai group_concatjusqu'à ce moment précis. Résout un problème que j'avais. Merci!
DiMono

22

Voulez-vous passer commande?

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;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.