Tenemos una tabla llamada ESTUDIANTES con la siguiente estructura:
mysql> select * from estudiantes;
+--------+-------------+------+
| nombre | asignatura | nota |
+--------+-------------+------+
| María | Matemáticas | 5.5 |
| María | Inglés | 8 |
| María | Física | 3.75 |
| Carlos | Matemáticas | 4.25 |
| Carlos | Inglés | 10 |
| Carlos | Física | 7.5 |
+--------+-------------+------+
6 rows in set (0.00 sec)
Sobre estos registros queremos extraer por cada estudiante la lista de asignaturas que ha aprobado, es decir, en las que ha sacado más de un 5.
mysql> select nombre, group_concat(asignatura separator '-') from estudiantes where nota>=5 group by nombre;
+--------+----------------------------------------+
| nombre | group_concat(asignatura separator '-') |
+--------+----------------------------------------+
| Carlos | Inglés-Física |
| María | Matemáticas-Inglés |
+--------+----------------------------------------+
2 rows in set (0.00 sec)
En este caso hemos indicado que el separador sería un guión pero podríamos haber indicado cualquier otro. Si no indicamos ningún separador nos lo va a devolver separado por comas.
mysql> select nombre, group_concat(asignatura) from estudiantes where nota>=5 group by nombre;
+--------+--------------------------+
| nombre | group_concat(asignatura) |
+--------+--------------------------+
| Carlos | Inglés,Física |
| María | Matemáticas,Inglés |
+--------+--------------------------+
2 rows in set (0.01 sec)
Esto es muy útil y ahora simplemente si recorriésemos los resultados mediante PHP podrías crear fácilmente una tabla HTML
Esta función group_concat() puede devolver como máximo 1024 caracteres que es el límite por defecto tal y como explican en la documentación de MySQL. Sin embargo esto se puede cambiar editando el fichero my.cnf de configuración y modificando el valor de la variable.
group_concat_max_len=16386
Otra forma es ejecutando previamente la siguiente sentencia.
SET GLOBAL group_concat_max_len=4096
Fuentes:
No hay comentarios:
Publicar un comentario