Ver Mensaje Individual
  #20 (permalink)  
Antiguo 05/01/2013, 10:55
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Consulta múltiple con INNER JOIN

Cita:
Iniciado por jurena Ver Mensaje
Este no es un foro de programación, no lo olvides.
Sí, lo sé, tienes razón, pero lo posteé aquí porque lo que necesito realmente es saber cómo debo hacer la consulta para obtener los datos que necesito para la programación.

Cita:
Iniciado por jurena Ver Mensaje
Yo voy a proporcionarte una propuesta mediante SQL, es decir, una consulta a la base de datos. Pruébala y verás lo que ocurre:

Código MySQL:
Ver original
  1.    usu2.nombre,
  2.    usu2.apellidos,
  3.    usu2.id IDUSUARIO,
  4.    IFNULL(SUM(t1.impusu),0) ImporteUsuario,
  5.    IFNULL(SUM(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( SUM( sim.importe ) , 0 ) impusu,
  11. IFNULL( SUM( sim.referidos ) , 0 ) refusu, '0'impsp, '0'refsp
  12. FROM simulador sim
  13. INNER JOIN usuarios usu ON sim.id_usuario = usu.id
  14. GROUP BY sim.id_usuario
  15. ORDER BY sim.id_usuario
  16. )
  17.  
  18. SELECT usu.id_sponsor, '0', '0', SUM( sim.importe ) , SUM( sim.referidos )
  19. FROM simulador sim
  20. INNER JOIN usuarios usu ON sim.id_usuario = usu.id
  21. GROUP BY usu.id_sponsor
  22. ORDER BY usu.id_sponsor
  23. ))t1 ON usu2.id = t1.idusuario GROUP BY usu2.id ORDER BY usu2.id
La verdad es que te lo has currado como si fuera para ti, te lo agradezco de todo corazón. La he probado pero, aparentemente, no da los datos necesarios, pero como da más datos de los que necesito y, la verdad, es una consulta que a mi se me escapa por completo a pesar de tu estupenda explicación, al dar más datos, ya no sé cómo hacer para que me dé los que necesito solamente y después, en la programación hacer el resto.

Cita:
Iniciado por jurena Ver Mensaje
con programación tal vez harías por separado las dos consultas y luego al recorrer una comparar con los datos de la otra y pasarlos, o cargar en un array y luego al hacer la segunda carga..., pero eso debes preguntarlo en el foro de programación.
La parte de programación la tengo bastante clara, el problema es que si no consigo obtener los datos correctamente, no puedo hacer funcionar el resto, ya que, en esa programación, entre otras cosas, lo que hace es actualizar los campos importe y referidos del sponsor, entonces, si no tengo bien esos dos datos, todo lo demás no anda.

Cita:
Iniciado por jurena Ver Mensaje
Una breve explicación sobre la consulta. Se trata de dos consultas para traer lo obtenido por un usuario como usuario y como sponsor. Uno mediante UNION ALL desplazando a distinto campo(alias) los datos como usuario y como sponsor. Luego hago una subconsulta con esos datos y los de todos los usuarios (necesario el uso de LEFT),con la que me traigo los nombres, apellidos e id, luego controlo los nulos para las sumas con IFNULL, agrupo por el id (en una consulta el usuario y en la otra el sponsor) y muestro los datos...
Creo que entiendo todo excepto lo que se refiere a las sumas, que no sé lo que suma, pero aún así, no soy capaz de armar yo solo la consulta concreta para obtener lo que necesito, he estado intentando modificar la que me has pasado viendo la explicación, pero no hay forma, me da errores que no consigo resolver, en esto es en lo que he dejado la consulta y a continuación el error que me da:

Código MySQL:
Ver original
  1.        usu2.id,
  2.        usu2.nombre,
  3.        usu2.apellidos,
  4.        usu2.codigo,
  5.     FROM usuarios usu2 LEFT JOIN ((
  6.     SELECT usu.id idusuario, sim.importe usuario_importe, sim.referidos usuario_referidos
  7.     FROM simulador sim
  8.     INNER JOIN usuarios usu ON sim.id_usuario = usu.id
  9.     GROUP BY sim.id_usuario
  10.     ORDER BY sim.id_usuario
  11.     )
  12.     UNION ALL (
  13.      
  14.     SELECT usu.id_sponsor, sim.importe sponsor_importe , sim.referidos sponsor_referidos
  15.     FROM simulador sim
  16.     INNER JOIN usuarios usu ON sim.id_usuario = usu.id
  17.     GROUP BY usu.id_sponsor
  18.     ORDER BY usu.id_sponsor
  19.     ))t1 ON usu2.id = t1.idusuario GROUP BY usu2.id ORDER BY usu2.id

Este es el error:


Cita:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM usuarios usu2 LEFT JOIN (( SELECT usu.id idusuario, sim.importe usu' at line 6

Y no consigo salir de ahí, no entiendo el error, por lo tanto no lo puedo corregir.

Si me pudieras echar un cable con lo que estoy haciendo mal, a ver si de una buena vez aprendo algo...

Muchas gracias de nuevo.

.