MySQL: ordina i valori GROUP_CONCAT


182

In breve: c'è un modo per ordinare i valori in un'istruzione GROUP_CONCAT?

Query:

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

Ottengo questa riga:

Artigianato »Falegnameria

Amministrazione »Organizzazione

Lo voglio così:

Amministrazione »Organizzazione

Artigianato »Falegnameria


Risposte:


389

Certo, vedi 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;

Il tuo codice è fortemente invocato per la tua risposta specifica, e quindi non dovrebbe essere inserito altrove il tuo post originale. Se lo metti qui in questo commento, molti programmatori qui non lo vedranno e non otterrai la migliore risposta possibile :)
Sampson,

Triste ma vero. :) Questo codice è sufficiente o devo scrivere l'intera query?
Ivar,

Hai provato ASC invece di DESC?
Sampson,

Non ho usato nessuno dei due (ASC = predefinito).
Ivar,

10
Non sapevo che potessi farlo order byentro un group_concatmomento esatto. Risolve un problema che stavo avendo. Grazie!
DiMono,

22

Intendi ordinare per?

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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.