Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: yoelrodguez en 8 Octubre 2014, 16:40 pm



Título: Restar dos registro en MYSQL
Publicado por: yoelrodguez en 8 Octubre 2014, 16:40 pm
Hola a todos tengo el siguiente problema,   quiero restar el valor de dos registro distinto que tengo en mysql. Le pongo el ejemplo:

Tabla con el contenido
idValor
110
220
330
Lo que quiero hacer es restar 20 - 10 y guardar ese valor y después restar 30 - 20 y guardar ese valor y así sucesivamente.

Si alguien me pudiera ayudar


Título: Re: Restar dos registro en MYSQL
Publicado por: MinusFour en 8 Octubre 2014, 16:47 pm
Código
  1. UPDATE tabla SET campo3 = campo3 - campo2, campo2 = campo2 - campo1


Título: Re: Restar dos registro en MYSQL
Publicado por: yoelrodguez en 8 Octubre 2014, 16:54 pm
Estuve viendo tu código y muchas gracias pero  lo que pasa es que el nombre de la columna es el mismo siempre y el id me varía de acuerdo si se ha borrado o no el registro.


Título: Re: Restar dos registro en MYSQL
Publicado por: MinusFour en 8 Octubre 2014, 17:12 pm
Ya, me doy cuenta que es una tabla de 2 columnas y lo que quieres es restar valores individuales de las hileras.

Yo creo que para eso vas a necesitar hacer un stored procedure y un loop.


Título: Re: Restar dos registro en MYSQL
Publicado por: yoelrodguez en 8 Octubre 2014, 17:14 pm
Tienes algún ejemplo que me facilites


Título: Re: Restar dos registro en MYSQL
Publicado por: MinusFour en 8 Octubre 2014, 18:03 pm
Código
  1. DELIMITER //
  2.  
  3. DROP PROCEDURE `changeVal`
  4. CREATE PROCEDURE `changeVal`()
  5.  
  6. DECLARE rowCount INT;
  7. DECLARE oldVal INT;
  8.  
  9. SET count = (SELECT COUNT(*) FROM tabla);
  10.  
  11. WHILE (rowCount > index) DO
  12. SET oldVal = (SELECT valor FROM tabla WHERE id = rowCount-1);
  13. UPDATE tabla SET valor = valor - oldVal WHERE id = rowCount;
  14. SET rowCount = rowCount -1;
  15. END WHILE
  16. END //

Esto podria funcionar si se preserva el auto_increment. Sino... no se, quizas con limit pero no lo he probado:

Código
  1. DELIMITER //
  2.  
  3. DROP PROCEDURE `changeVal`
  4. CREATE PROCEDURE `changeVal`()
  5.  
  6. DECLARE oldVal INT;
  7. DECLARE myRow INT;
  8.  
  9. SET count = (SELECT COUNT(*) FROM tabla);
  10.  
  11. WHILE (count > index) DO
  12. SET oldVal = (SELECT valor FROM tabla LIMIT 1, count-2);
  13. SET myRow = (SELECT id FROM tabla LIMIT 1, count-1);
  14. UPDATE tabla SET valor = valor - oldVal WHERE id = myRow;
  15. SET count = count - 1;
  16. END WHILE
  17. END //
  18.