miércoles, 4 de junio de 2008

Retornar registros separada por comas con MYSQL

La otra vez buscando una solucion optimizada para poder listar todos los registros de un campo obtenidas de una consulta de base de datos, pero que se muestren separadas con comas (,)

Bueno ya lo habia solucionado usando PHP como lenguaje y que consistia en retonar todas los registros desde la base de datos MYSQL 5
SELECT nombre
FROM FILTROS
WHERE id_filtroPadre = 169
Posteriormente hice un bucle por cada fila y la unia en una cadena (string) separando cada fila con una coma(,).

Problema
Tenia que hacer 2 pasos para poder obtener la lista de registros separados por comas y que hacia mas lento el proceso. Ya que, tenia que obtener los datos de la bd y posteriormente recorrerlos uno por uno, asignarlos a una cadena y separarlas por comas.

Esto dependiento de la cantidad de registros obtenidos iba a causarme un problema de performace sobre el sistema.

Solucion
Investigando encontre una forma de que el mismo MYSQL me devuelva los registros separados por comas y mostrados en un solo registro.

Esta funcion se llama GROUP_CONCAT y lo que hace es agrupar todos los registros obtenidos de la consulta y concatenarlos (juntarlos) en un registro
SELECT GROUP_CONCAT(nombre SEPARATOR ', ') 'nombres'
FROM FILTROS
WHERE id_filtroPadre = 169
Esta forma mejoro la performace del sistema considerablemente, ya que no dependia de hacer otro paso para poderla mostrar de la forma que deseaba.

Link oficial
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

1 comentario:

Anónimo dijo...

Me gusto mucho, me sirvio , yo tambien hacia lo mismo que tu hacias..