lunes, 23 de abril de 2018

MySQL - Devolver resultados de una consulta de un group by separados por comas

Buen dia a todos,
Para devolver el resultado de una consulta que con una tabla cruzada, y esta información que se muestre por un separador, en este caso una coma, se puede usar la siguiente instrucción.

Ejemplo:

Tabla: pais
 id|descripcion
 1      Colombia
 2      Argentina
 3      Ecuador

Tabla: gustos
id|gusto
1   cafe
2   futbol
3   musica


Tabla crizada: xref_pais_gusto
pais_id|gusto_id
 1          1
 1           2
  2          2   
  2          3

Resultado ejemplo

Detalle: resultado
pais|gustos
Colombia   cafe,futbol
Argentina   futbol,musica

SQL

SET GLOBAL group_concat_max_len=4096;
SELECT pais_
         GROUP_CONCAT(DISTINCT gusto) AS gustos
FROM pais AS p
INNER JOIN xref_pais_gusto AS pg ON pg.pais = p.id
INNER JOIN gustos AS g ON g.id = pg.gusto_id
GROUP BY pais;

Nota: se debe cambiar el parametro group_concat_max_len, ya que por defecto solo devuelve 1024, por campo concatenado.

Espero les sirva.

Saludos