Pregunta

Quiero ordenar los resultados en función GROUP_CONCAT. El problema es que la selección en el GROUP_CONCAT-función es otra función, como esto (la fantasía seleccionar):

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

Quiero conseguir un resultado como (ordenada por b.id):

michael    1:science,2:maths,3:physics

pero me sale:

michael    2:maths,1:science,3:physics

¿Alguien sabe cómo puedo ordenar por b.id en mi GROUP_CONCAT aquí?

¿Fue útil?

Solución

Si le importa a nadie, creo que he encontrado una solución para, al menos, un problema similar.

http://mahmudahsan.wordpress.com/2008 / 08/27 / mysql-la-GROUP_CONCAT funciones /

select GROUP_CONCAT(columnName order by someColumn SEPARATOR '|') from tableName where fieldId = p.id

El orden por va en el GROUP_CONCAT antes del separador, si es que existe.

Otros consejos

Sé que esto es muy viejo, pero justo ahora que estaba buscando una respuesta y la respuesta de @ korny me dio la idea para esto:

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

(Y funciona para mí, si eso no fuera claro :-))

No sé de una manera estándar de hacer esto. Esta consulta funciona, pero me temo que sólo depende de algún detalle de implementación:

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

No hay necesidad de subselects.

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top