Existe una función en MySQL para concatenar varias filas en una sola de manera que obtenemos una cadena resultante con los valores no nulos. Descubramos cómo funciona.
La función de MySQL GROUP_CONCAT es muy útil a la hora de obtener agrupaciones de elementos en alguna consulta.
Su sintaxis en la siguiente:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
Veamos algunos ejemplos de su uso:
Imaginaros que tenemos la siguiente tabla con datos sobre los alumnos de una clase:
SELECT * FROM alumnos
id_alumno |
nombre |
dni |
1 |
Juan |
76785434S |
2 |
José |
73778423T |
3 |
Ana |
72778345J |
Si queremos por ejemplo obtener una lista con los id de los alumnos de la clase separados por comas, podemos hacerlo con la siguiente consulta:
SELECT GROUP_CONCAT(id_alumno SEPARATOR ‘,’) AS ids_alumnos
FROM alumnos
ids_alumnos |
1,2,3 |
Si queremos obtener una lista con varios campos, por ejemplo queremos obtener una lista con el nombre y el dni separados por comas. Podemos hacer algo parecido a lo siguiente:
SELECT GROUP_CONCAT(nombre,dni SEPARATOR ‘,’) AS datos_alumnos
FROM alumnos
datos_alumnos |
Juan76785434S,José73778423T,Ana72778345J |
Incluso podemos concatenar cadenas entre los diferentes campos.
SELECT GROUP_CONCAT(nombre,’-’,dni SEPARATOR ‘,’) AS datos_alumnos
FROM alumnos
datos_alumnos |
Juan-76785434S,José-73778423T,Ana-72778345J |
La única precaución que debéis tener con esta función es el límite de la cadena resultante ya que por defecto está especificada en 1024 caracteres y si es mayor se truncará el resultado.
Pero si quereis utilizar la función de MySQL GROUP_CONCAT con más caracteres en el resultado podéis modificar la variable global de MySQL group_concat_max_len.
SET GLOBAL group_concat_mas_len = 2048
Última modificación: oct 17, 2024