Ver Mensaje Individual
  #27 (permalink)  
Antiguo 06/01/2013, 15:14
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta múltiple con INNER JOIN

Dices que en usuarios un id_usuario aparece nada más que una vez, y así debe ser, pero si un id_usuario se repite en simulador, aunque sea una sola vez, ya tienes que agrupar. Solo en el caso de que todo id_usuario tuviera solo un registro en simulador relacionado podrías no usar ese primer group by. De acuerdo, si es así. Pero en la segunda consulta, es necesario, pues un sponsor lo puede ser de varios usuarios, y eso te obliga a agrupar para sacar la suma de ese sponsor. En ese caso, si tu versión de MySQL permite subconsultas, esta debería funcionar:
A mí me funciona:
Código MySQL:
Ver original
  1.    usu2.nombre,
  2.    usu2.apellidos,
  3.    usu2.id IDUSUARIO,
  4.    IFNULL(t1.impusu,0) ImporteUsuario,
  5.    IFNULL(t1.refusu,0) RequeridoUsuario,
  6.    IFNULL(SUM(t1.impsp),0) ImporteSponsor,
  7.    IFNULL(SUM(t1.refsp),0) UsuarioSponsor
  8. FROM usuarios usu2 LEFT JOIN
  9. ((SELECT usu.id idusuario,
  10. IFNULL(sim.importe, 0 ) impusu,
  11. IFNULL(sim.referidos, 0 ) refusu, '0' impsp, '0'refsp
  12. FROM simulador sim
  13. INNER JOIN usuarios usu ON sim.id_usuario = usu.id
  14. ORDER BY sim.id_usuario)
  15. (SELECT usu.id_sponsor, '0', '0', SUM( sim.importe ) , SUM( sim.referidos )
  16. FROM simulador sim
  17. INNER JOIN usuarios usu ON sim.id_usuario = usu.id
  18. GROUP BY usu.id_sponsor
  19. ORDER BY usu.id_sponsor))t1
  20. ON usu2.id = t1.idusuario GROUP BY usu2.id ORDER BY usu2.id

Si las tablas se llaman así y los campos también, copia esta consulta y pruébala.