Ver Mensaje Individual
  #18 (permalink)  
Antiguo 05/01/2013, 07:27
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

De verdad, jurena, siento darte tanto la lata, pero te ni te imaginas lo agradecido que te estoy por tanta dedicación.

Cita:
Iniciado por jurena Ver Mensaje
Debes probar las consultas. Prueba esta y dinos qué es lo que te molesta.
Código MySQL:
Ver original
  1.       usu.id,
  2.       usu.nombre,
  3.       usu.apellidos,
  4.       sim.importe,
  5.       sim.referidos,
  6.       usu.id_sponsor
  7.     FROM simulador sim
  8.       INNER JOIN usuarios usu ON sim.id_usuario = usu.id
  9.      ORDER BY sim.id_usuario
Esta consulta, perfecta, me muestra el id del sponsor de cada usuario, respecto a los campos importe y referidos, como en la aplicación la consulta no sé si es correcta, tampoco puedo saber si lo que me está mostrando está bien o no, pero eso es culpa mía, por no haber previsto la consulta que debía hacer para obtener los datos correctos...

Cita:
Iniciado por jurena Ver Mensaje
Si quieres totales por id_usuario tienes que añadir
Código MySQL:
Ver original
  1.       usu.id,
  2.       usu.nombre,
  3.       usu.apellidos,
  4.       SUM(sim.importe),
  5.       SUM(sim.referidos)
  6.     FROM simulador sim
  7.       INNER JOIN usuarios usu ON sim.id_usuario = usu.id
  8.       GROUP BY sim.id_usuario
  9.      ORDER BY sim.id_usuario
Esta consulta no es que no funcione, pero no es lo que necesito, puesto que los totales debo sacarlos por medio de programación que es lo que debe hacer el simulador en cuestión.

Cita:
Iniciado por jurena Ver Mensaje
Ya solo nos faltarían los importes y referidos como sponsor de cada uno de esos mismos usuarios. ¿Vamos ahora bien? Piensa, por otra parte, que un sponsor no tiene por qué tener datos en simulador como usuario, y que un usuario que tiene datos ahí no tiene por qué ser sponsor. Te lo digo por lo que vendrá después...
Tienes razón, realmente, si el simulador funciona, llega un momento que el campo referidos estará en 0 y justo en ese momento es cuando sabré si el simulador funciona (ya sé, es paradójico, pero es real, jejeje)

En lo que respecta a usuarios, todos deberán tener datos en el simulador, al menos en el campo importe, ya que la simulación la hacemos con el mismo número de referidos para todos los usuarios.

Es decir, aunque no sea referente a este foro, aclaro, en la aplicación la simulación comienza con, por ejemplo 10 referidos, estos son para cada usuario, y, conforme va corriendo la aplicación, va produciendo lo que se llama un spillover, de forma que, mientras haya un usuario con referidos, debe seguir corriendo la aplicación.

Cita:
Iniciado por jurena Ver Mensaje
Dime si estoy en lo cierto cuando creo que te equivocas al repetir en usuarios los nombres de los usuarios 6 y 7 que coinciden con los usuarios 3 y 4, pero con distinto sponsor. Tampoco está bien, creo el id_sponsor -1 del usuario id = 1, tal vez sea id_sonsor 1, pero eso supondría que uno puede ser sponsor de sí mismo. Por otra parte el campo codigo no tiene sentido aquí, pues un mismo usuario puede tener distintos codigos.
No es que me equivoque, es que se me acabó la imaginación para añadir nombres y apellidos, jejeje, lo siento por la confusión. Realmente lo que cuenta son los campos id y codigo, que, si te fijas, es lo mismo, pero sumando 1000

Cita:
Iniciado por jurena Ver Mensaje
Creo que codigo debería ser el campo PK de la tabla simulador y que es allí donde debería repetirse el id_usuario con los demás campos tal y como los tienes, salvo que me digas que el usuario puede cambiar de sponsor y eso es lo que indica el código, pero en ese caso te faltarían fechas. Primero tendremos que resolver esto, pues ya creo haber entendido lo que quieres, una salida como esta (con tus datos)
|id..|nombre|apellidos|codigo|id_sponsor|
------------------------------
|..1.|.Pepe...|.Gómez.....|..1001..|.......1..|
----------------------------
|..2.|.Juan...|.López.....|..1002..|.........1..|
----------------------------
|..3.|.Jorge..|.Pérez.....|..1003..|.........1..|
-----------------------------
|..4.|.Ángel..|.Aguirre...|..1004..|.........2..|
-----------------------------
|..5.|.Luis...|.Vázquez...|..1005..|.........2..|

Tabla simulador

______________________________
codigo|id_usuario|importe|referidos|cual|
----------------------
1001|.........1..|...500...|.....2.....|......|
-----------------------
1002|.........2..|..1000...|.....4.....|......|
---------------------
1003|.........3..|.....0...|.....0.....|......|
---------------------
1004|.........4..|.....0...|.....0.....|......|
---------------------
1005|.........5..|.....0...|.....0.....|......|
---------------------
1006|.........3..|.....0...|.....0.....|......|
---------------------
1007|.........4..|.....0...|.....0.....|......|

id|nombre|apellidos|totimp_us|totreq_us|totimp_sp| totreq_sp
1|Pepe Gómez|500|2|1500 (500+1000)|6 (2+4)
Porque Pepe Gómez tiene que ver con dos codigos de simulador (1001 y 1002), un registro como usuario (1001), y también aparece en simulador otro usuario que lo tiene a él como sponsor (1002) y es sponsor de sí mismo (1001).

Si es esto lo que quieres, se podrá hacer la consulta, creo
Estoy seguro que que la consulta se debe de poder hacer, lo que pasa es que yo ando algo corto de conocimientos básicos, pero precisamente por eso, me empeño en aprender, y qué mejor manera de aprender que con aplicaciones prácticas de las cosas...

A ver, el código, es como el nombre y los apellidos, un dato más a obtener de cada usuario para mostrarlo al final, el verdadero "meollo" está en obtener los campos importe y referidos como usuario y esos mismos campos como sponsor.

Es decir, si yo hago la consulta:

Código MySQL:
Ver original
  1. SELECT  usu.id,
  2.         usu.nombre,
  3.         usu.apellidos,
  4.         usu.id_sponsor,
  5.         sp.id_usuario AS sim_sp,
  6.         usu.codigo,
  7.         sim.id_usuario,
  8.         sim.importe,
  9.         sp.importe AS sp_importe,
  10.         sim.referidos,
  11.         sp.referidos AS sp_referidos
  12. FROM usuarios AS usu
  13. INNER JOIN simulador AS sim ON (usu.id = sim.id_usuario)
  14. INNER JOIN simulador AS sp ON (sp.id_usuario = usu.id_sponsor)
  15. GROUP BY usu.id
  16. ORDER BY usu.id ASC


Esto se lo asigno al array $datos[] y lo que pretendo obtener es:

$importe = $datos['importe'] - importe como usuario
$referidos = $datos['referidos'] - referidos como usuario
$sp_importe = $datos['sp_importe'] - importe como sponsor
$sp_referidos = $datos['sp_referidos'] - referidos como sponsor
$sim_sp = $datos['sim_sp'] - id de usuario como sponsor en tabla simulador

De forma que, luego en la aplicación le pueda decir algo como (sin refinar, a grandes rasgos):

Sumo al importe del sponsor lo que le corresponde
$sp_importe = $sp_importe + xxxxx
Resto a los referidos del sponsor los que corresponden
$sp_referidos = $sp_referidos - xx

Código MySQL:
Ver original
  1. UPDATE simulador
  2.     SET `importe`= '$sp_importe',
  3.         `referidos`='$sp_referidos'
  4.     WHERE `id_usuario` = '$sim_sp';

Es complicado de explicar porque no puedo incluir código que no sea de base de datos, sería mucho más simple si pudiera incluir unas pequeñas partes de código, pero espero que así se entienda algo mejor.

De verdad que agradezco muchísimo la ayuda, sobre todo si va acompañada de lecciones , no es cuestión de que nadie me de las cosas hechas si no están explicadas, porque entonces no aprendo ¿no crees? Pero sí está genial que haya gente dispuesta a enseñar y a colaborar en el aprendizaje de los demás.

A ver si ahora le damos al punto...

.