¿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;
Mi salida:
shopping
fishing
coding
pero en su lugar sólo quiero 1 fila, 1 col:
Salida esperada:
shopping, fishing, coding
El motivo 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 <a href="http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws"Doc<MySQL y no parece que las funciones CONCAT
o CONCAT_WS
acepten conjuntos de resultados, así que ¿alguien aquí sabe cómo hacer esto?
1135
3
Puede utilizar [
GROUP_CONCAT
][group-concat]:Como dijo Ludwig en su comentario, puedes añadir el operador
DISTINCT
para evitar duplicados:Como Jan dijo en su comentario, también puedes ordenar los valores antes de implosionar usando
ORDER BY
:Como Dag dijo en su comentario, hay un límite de 1024 bytes en el resultado. Para solucionar esto, ejecuta esta consulta antes de tu consulta:
Por supuesto, puedes cambiar
2048
según tus necesidades. Para calcular y asignar el valor:Eche un vistazo a
GROUP_CONCAT
si su versión de MySQL (4.1) lo soporta. Vea la documentación para más detalles.Se vería algo así:
Existe una función agregada de GRUPO, GROUP_CONCAT.