Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/09/2011, 16:07
Avatar de latinpower
latinpower
 
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 14 años, 2 meses
Puntos: 10
Procedimientos MYSQL rows a variables internas

Hola,

Estoy haciendo un procedimiento que suma puntajes, pero el problema que tengo es que al ejecutarlo, MYSQL query me dice que las subquerys devuelven más de un valor, y yo lo único que quiero es trabajar con memoria interna de MYSQL. Estuve viendo varios ejemplos y todo pero no encuentro el error.

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `actualizar_puntajes` $$
  4. CREATE DEFINER=`root`@`localhost` PROCEDURE `actualizar_puntajes`(in id_ganador int, in id_perdedor int)
  5.  
  6.   declare pts_perdidos int;
  7.  
  8. declare pts_nivel int;
  9. declare id_padre int;
  10. declare per_derrota int;
  11. declare nivel int;
  12. declare pts_padre int;
  13. declare pts_actual int;
  14. declare a_pagar int;
  15. declare resto int;
  16.  
  17.  /*obtengo puntaje acutal*/
  18.   set @pts_actual = (select puntos from jugadores where idjugadores = 1);
  19.  
  20.   /*calculo el vuelto*/
  21.   set @resto = @pts_actual - @a_pagar;
  22.   /*le hago pagar*/
  23.   update jugadores set puntos = @resto where idjugadores =1;
  24.  
  25. /*subo en la cadena*/
  26.   /*el padre se transforma en perdedor*/
  27.   set @id_perdedor =  @id_padre;
  28.   /*el 15 del original*/
  29. set   @pts_perdidos = (@pts_perdidos  * @por_nota);
  30.  
  31.  
  32.   /*Calculo los puntos por nivel que perdio el tipo, los pts que pierde el perdedor dependen de los puntos del nivel
  33.   del ganador */
  34.   set @pts_perdidos = (select niveles.nivel from jugadores, niveles, relaciones where jugadores.id_nivel = relaciones.id_hijo and jugadores.idjugadores =1);
  35.  
  36.  
  37.   /*Veo si tiene padre*/
  38.   set @id_padre = (select id_padre from jugadores, relaciones where jugadores.idjugadores = relaciones.id_hijo and jugadores.idjugadores =1);
  39.  
  40.   /*Si tiene padre */
  41.   if @id_padre  != null then
  42.  
  43.   /*Obtengo porcentaje de puntos perdidos para su padre, de acuerdo al nivel del perdedor*/
  44.   set @per_derrota = (select porcentaje_socios from niveles, jugadores where jugadores.id_nivel = niveles.id_niveles and jugadores.idjugadores = 1);
  45.   /*   100          =  100             -   ( 100 * 0.15 = 15);*/
  46.   set @a_pagar =  @pts_perdidos  - (@pts_perdidos * @per_derrota);
  47.  
  48.   end if;
  49.  
  50.   until @id_perdedor = NULL
  51.  
  52.  
  53. END $$
  54.  
  55. DELIMITER ;

Alguien sabe como es el tema de recibir valores que devuelven los select a variables internas?, porque tengo entendido que con set @var = query se puede.

Gracias.