Ordinazione in un MySQL group_concat con una funzione in esso
-
21-09-2019 - |
Domanda
Voglio ordinare i risultati in una funzione group_concat. Il problema è, che la selezione nel group_concat-funzione è un'altra funzione, come questo (fantasia selezionare):
SELECT a.name,
GROUP_CONCAT(DISTINCT CONCAT_WS(':', b.id, c.name) ORDER BY b.id ASC) AS course
FROM people a, stuff b, courses c
GROUP BY a.id
Voglio ottenere un risultato simile (in ordine di b.id):
michael 1:science,2:maths,3:physics
ma ottengo:
michael 2:maths,1:science,3:physics
Qualcuno sa come posso ordinare dal b.id nella mia group_concat qui?
Soluzione
Se qualcuno se ne frega, penso di aver trovato una soluzione per almeno un problema simile.
http://mahmudahsan.wordpress.com/2008 / 08/27 / mysql-the-group_concat-funzione /
select GROUP_CONCAT(columnName order by someColumn SEPARATOR '|') from tableName where fieldId = p.id
L'ordine dal va nella group_concat prima del separatore se presente.
Altri suggerimenti
So che questo è molto vecchio, ma solo ora che cercavo risposta una risposta e di @ KoRnY mi ha dato l'idea per questo:
SELECT a.name,
GROUP_CONCAT(DISTINCT CONCAT_WS(':', b.id, c.name)
ORDER BY CONCAT_WS(':', b.id, c.name) ASC) AS course
FROM people a, stuff b, courses c
GROUP BY a.id
(E funziona per me, se non fosse chiaro :-))
Non so di un modo standard per fare questo. Questa query funziona, ma ho paura dipende solo da qualche dettaglio di implementazione:
SELECT a_name, group_concat(b_id)
FROM (
SELECT a.name AS a_name, b.id AS b_id
FROM tbl1 a, tbl2 b
ORDER BY a.name, b.id) a
GROUP BY a_name
Non c'è bisogno di subselect.
SELECT people.name, CONCAT_WS(":", stuff.id, courses.name) data
FROM people, stuff, courses
ORDER BY stuff.id, people.name
SELECT pub_id,GROUP_CONCAT(DISTINCT cate_id)
FROM book_mast
GROUP BY pub_id
ORDER BY GROUP_CONCAT(DISTINCT cate_id) ASC;
SELECT generated.name, GROUP_CONCAT(generated.data)
FROM (
SELECT people.name, CONCAST_WS(":", stuff.id, courses.name) data
FROM people, stuff, courses
ORDER BY stuff.id, people.name
) generated
GROUP BY generated.name