MySQL - Ayuda con Query de tres tablas

 
Vista:

Ayuda con Query de tres tablas

Publicado por ArturoGuerrero (2 intervenciones) el 15/07/2008 00:51:45
Hola a todos, estoy realizando un reporte y no se si pueda realizarlo en una sola consulta, asi que vengo a pedir su sabio consejo.

tengo tres tablas:
usuarios, cuentas, actividad, la relación entre usuarios y cuentas es la tabla actividad de muchos a muchos, uno de los campos de esta relación es horas trabajadas, yo necesito el nombre del usuario, el nombre de la cuenta y las horas trabajadas, y en caso de que un usuario no tenga horas trabajadas en una cuenta, deberia poner un cero, he estado intentando obtener este resultado, pero no he conseguido hacer esto último, alguien de ustedes me podría ayudar?

les doy los campos de cada tabla:

usuarios: id_usuario, d_nombre
cuentas: id_cuenta, d_nombre
actividad: id_actividad, id_usuario, id_cuenta, n_horas, d_descripcion, d_fecha

el query que he estado probando es el siguiente:

SELECT
a.d_nombre,
u.d_nombre,
SUM(ac.n_horas) as horas
FROM
actividad ac,
usuarios u,
cuentas a
WHERE
ac.id_usuario = u.id_usuario
AND ac.id_cuenta = a.id_cuenta
AND ac.d_fecha
BETWEEN '2008-06-01' AND '2008-06-30'
GROUP BY
a.d_nombre asc,
u.d_nombre asc

Espero me puedan ayudar

Salu2 y gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con Query de tres tablas

Publicado por Pineapple (10 intervenciones) el 15/07/2008 01:22:38
Hola..
Que es lo que quieres hacer? que cuando no haya horas te de cero? tu tabla esta configurada para que el default sea cero y no null?

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con Query de tres tablas

Publicado por ArturoGuerrero (2 intervenciones) el 15/07/2008 01:36:28
LA TABLA DE ACTIVIDADES ES UNA TABLA DE RELACIÓN ENTRE LAS CUENTAS Y LOS USUARIOS, SIEMPRE TRAERAN LOS DOS ID'S, LO QUE NECESITO ES RELACIONAR TODOS LOS USUARIOS CONTRA TODOS LOS CLIENTES Y SI NO ESTAN EN LA TABLA ACTIVIDAD PONGA UN CERO. PONGO UNOS DATOS DE CADA TABLA PARA VER SI ME EXPLICO MEJOR

USUARIOS:
ID_USUARIO | D_NOMBRE
U1 | USR1
U2 | USR2
U3 | USR3

CUENTAS
ID_CUENTA | D_NOMBRE
C1 | CTA1
C2 | CTA2
C3 | CTA3
C4 | CTA4
C5 | CTA5

ACTIVIDADES
ID_ACTIVIDAD | ID_CUENTA | ID_USUARIO | D_FECHA | D_HORAS
1 | C1 | U1 |2008-01-01| 2
2 | C1 | U2 |2008-01-01| 2
3 | C1 | U3 |2008-01-01| 2
4 | C2 | U1 |2008-01-01| 2
5 | C3 | U2 |2008-01-01| 2
6 | C4 | U3 |2008-01-01| 2
7 | C5 | U1 |2008-01-01| 2

SI ASI EJECUTO MY QUERY ME SALE ALGO ASI:

ID_CUENTA | ID_USUARIO | HORAS
CTA1 | USR1 | 2
CTA1 | USR2 | 2
CTA1 | USR3 | 2
CTA2 | USR1 | 2
CTA3 | USR2 | 2
CTA4 | USR3 | 2
CTA5 | USR1 | 2

Y LO QUE NECESITO OBTENER ES ESTO:

ID_CUENTA | ID_USUARIO | HORAS
CTA1 | USR1 | 2
CTA1 | USR2 | 2
CTA1 | USR3 | 2
CTA2 | USR1 | 2
CTA2 | USR2 | 0
CTA2 | USR3 | 0
CTA3 | USR1 | 0
CTA3 | USR2 | 2
CTA3 | USR3 | 0
CTA4 | USR1 | 0
CTA4 | USR2 | 0
CTA4 | USR3 | 2
CTA5 | USR1 | 2
CTA5 | USR2 | 0
CTA5 | USR3 | 0

ESPERO HABERME EXPLICADO MEJOR, TE AGRADEZCO MUCHISIMO EL APOYO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con Query de tres tablas

Publicado por Pineapple (1 intervención) el 15/07/2008 18:28:05
Hola arturo, ya cheque lo que quieres y en mi humilde opinion, lo que tu necesitas hacer es un stored procedure, o hacer esto con php para representarlo, porque si tu te fijas en tu query solo estas mostrando los registros que tienes en la tabla actividades, entonces nunca vas poder hacer lo que quieres porque tu necesitas ke el formar pares y esto s eme ocurre con algun proceso de stored, o php, con algo asi como for each row, y recorres una tabla y por cada elemento recorres la otra con todos sus elementos y te traes sus datos, me explico?

Esa es mi humilde opinion decomoquiera en mysql existe la funcion IF para que pongas los resultados en 0

Ejemplo:
mysql> SELECT IF(1>2,2,3);
-> 3
No se si me explike bien pero si sigues necesitando ayuda aki estamos para apoyarte.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar