521 votos

¿Puedo concatenar varias filas de MySQL en un solo campo?

Usando MySQL, puedo hacer algo como

select hobbies from peoples_hobbies where person_id = 5;

y conseguir:

shopping
fishing
coding

pero en cambio sólo quiero 1 fila, 1 col:

shopping, fishing, coding

La razón es que estoy seleccionando varios valores de varias tablas, y después de todas las uniones tengo muchas más filas de las que me gustaría.

He buscado una función en Doc. MySQL y no parece que las funciones CONCAT o CONCAT_WS acepten conjuntos de resultados, así que ¿alguien sabe cómo hacerlo?

812voto

che Puntos 6899

Puede utilizar GROUP_CONCAT .

Como en:

SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ')
    FROM peoples_hobbies GROUP BY person_id

Muerte : Como Dag dijo en su comentario, hay un límite de 1024 bytes en el resultado. Para solucionar esto, ejecute esta consulta antes de su consulta:

SET group_concat_max_len = 2048

Por supuesto, puede cambiar 2048 según sus necesidades.

44voto

lpfavreau Puntos 5622

Echa un vistazo a group_concat si su versión de MySQL (4.1) lo soporta. Ver http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat para más detalles.

Sería algo así:

select group_concat(hobbies separator ', ') 
  from peoples_hobbies where person_id = 5 group by 'all';

18voto

pau.moreno Puntos 1061

Puede cambiar la longitud máxima del GROUP_CONCAT valor ajustando el group_concat_max_len parámetro.

Ver detalles en el Documentación de MySQL .

13voto

Dean Rather Puntos 7856

Existe la función GROUP Aggregate, GROUP_CONCAT .

Editar: Estaba escribiendo esta respuesta cuando me sorprendió una barra amarilla que aparecía en la parte superior diciéndome que otra persona acababa de publicar exactamente la misma respuesta. Es el ganador :)

2voto

Dreamer Puntos 90

Utilice la variable de sesión de MySQL(5.6.13) y el operador de asignación como el siguiente

SELECT @logmsg := CONCAT_ws(',',@logmsg,items) FROM temp_SplitFields a;

entonces puedes conseguir

test1,test11

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X