Ver Mensaje Individual
  #7 (permalink)  
Antiguo 24/12/2012, 06:41
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

Gracias de nuevo gnzsoloyo por tu respuesta,

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Yo no le encuentro mucho sentido a esto:
Código MySQL:
Ver original
  1. INNER JOIN simulador AS sim ON (usu.id = sim.id_usuario)
  2. INNER JOIN simulador AS sp ON (sp.id_usuario = usu.id_sponsor)
Para cumplir esa condición parecería que debe cumplirse que usuario y sponsor fuesen el mismo.
La verdad es que yo tampoco le encuentro mucho sentido, no estoy nada seguro de lo que estoy haciendo...

Realmente, sí deben ser el mismo, pero ocupando diferentes roles, es decir, en un caso es para que los campos nombre, apellidos y código (obtenidos de la tabla usuarios) sean del usuario (en la tabla simulador) y en otro caso para que los campos referidos e importe sean los del sponsor del usuario (en la tabla simulador) que estamos tratando.


Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por otro lado, no termino de entender para qué necesitas invocar dos veces a la tabla Simulador, cuando según se infería antes, cada entrada en Simulador sólo se relaciona con una única entrada de Usuario.
Entendamos lo que se infiere:
- Un usuario, tiene un sólo sponsor.
- Cada usuario puede tener N entradas en Simulador.
- La entrada en simulador se relaciona con los Sponsors, sólo por medio del Usuario.
Respecto a esto, aclaro:

Cita:
Iniciado por gnzsoloyo Ver Mensaje
- Un usuario, tiene un sólo sponsor..
Correcto, así es.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
- Cada usuario puede tener N entradas en Simulador.
No, cada usuario solo puede tener una entrada en simulador, por lo que veo esta es una parte del problema.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
- La entrada en simulador se relaciona con los Sponsors, sólo por medio del Usuario.
No entiendo bien, pero intentaré explicarlo:

El usuario en simulador, necesito relacionarlo con su sponsor, esto solo lo puedo hacer a través de la tabla usuarios que es donde esta el campo id_sponsor en cada registro (usuario), para lo que explico más adelante.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En ese contexto, relacionar simulador con un Sponsor, requeriría que hubiese dos entradas al simulador, una por cada uno, tales que ambas entradas a su vez estuviesen relacionadas entre si... cosa que no se puede deducir de lo que planteas, ni tampoco lo determinas en tu consulta (no es inferible).
Esta parte no la entiendo

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La lógica del sistema, francamente, no se entiende sin que nos expliques exactamente qué representa. Y si no entendemos la lógica del sistema, es difícil decir si la consulta está bien, o si las tablas cumplen con las necesidades del sistema.

Voy a intentar explicar lo que pretendo, ya que en lo que se refiere a la consulta estoy más que perdido...

Tenemos todos los usuarios en las dos tablas, con el mismo id, en la tabla usuarios es el campo id y en la tabla simulador, es el campo id_usuario (simplemente es porque cuando comencé el sistema, no pensaba que fuese a crecer tanto y por eso solo puse id en el campo de la tabla usuarios, no hay otro motivo).

Bien, de la tabla usuarios debemos obtener el nombre, apellidos, código y el id_sponsor, los 3 primeros son solo para mostrar los resultados con esos datos, el 4º es para relacionar el usuario con su sponsor en la tabla simulador, puesto que luego debemos actualizar los campos referidos e importe correspondiente al id de usuario del sponsor en esta última tabla.

De lo que no estoy seguro es de la consulta que debo hacer para obtener estos datos y luego poder actualizar esos dos campos, creo que de la forma que lo estoy haciendo, lo que actualizo son los dos campos, pero referente al usuario en vez de a su sponsor.

No sé si se entenderá, pero de verdad que yo en mi cabeza lo tengo muy claro... otra cosa es conseguir explicarlo para que me puedas ayudar...

Muchas gracias de nuevo.

.