viernes, 8 de febrero de 2013
Como obtener el resultado de una consulta en MySQL como Cadena.
Hace un par de semanas me enfrenté con un pequeño problema que resolví de buena manera. Dicho problema fue el siguiente: Necesitaba obtener un reporte de todos los usuarios de un sistema, además de ello necesitaba obtener las fechas de inicio de sesión de cada usuario de los últimos 30 días. En pocas palabras, requería algo como lo siguiente:
-----------------------------------------------------------------
| Nombre de Usuario | Fechas de Inicio de sesión |
-----------------------------------------------------------------
| correo1@mail.com | 2012-15-24,2012-15-25,2012-15-26 |
| correo2@mail.com | 2012-15-20,2012-15-25,2012-15-27 |
| correo3@mail.com | 2012-15-24,2012-15-25,2012-15-26 |
| correo4@mail.com | 2012-15-24,2012-15-25 |
-----------------------------------------------------------------
Esto es un problema sencillo de resolver, bastaría con ejecutar 2 consultas y algo de programación. Pero es más rápido y eficiente ejecutar una sola consulta. Esto se podría hacer gracias a la función de MySQL GROUP_CONCAT, la cual permite obtener los resultados de una consulta como una cadena.
Para el caso de este problema supongamos que se tienen 2 tablas, una llamada Usuario con idUsuario(Pk) y nombreUsuario y la otra llamada AccessLog con idUsuario(Fk) y FechaInicio (Se que esta tabla debería llevar una llave primaria , pero para el ejemplo la omití). La tabla AccessLog almacena las fechas de inicio de sesión de los usuarios de los últimos 30 días.
La consulta para obtener la talba de arriba sería la siguiente:
SELECT Usuario.nombreUsuario AS Usuario,
GROUP_CONCAT(AccessLog.FechaInicio) AS Fechas
FROM Usuario, AccessLog
WHERE Usuario.idUsuario = AccessLog.idUsuario
Con esta consulta nos ahorramos hacer una consulta que traiga a todos los usuarios y otra que además por cada usuario traiga las fechas de inicio de sesión, aunado a los ciclos necesarios para construir la tabla de arriba.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario