> Faqs > Cómo hacer una SQL para restar cantidad del inventario al generar la venta

Cómo hacer una SQL para restar cantidad del inventario al generar la venta

Tengo una tabla de compras que es (inventario) y de ventas lo que yo quiero es que al generar la venta me reste la cantidad del inventario. Es decir si tengo 50 cervezas pilsen y vendo 45 me deberian quedar 5 cervezas pilsen en el inventario.

He echo la consulta como tal y me resta pero no me resta bien es decir si yo genero una venta sea por cerveza pilsen y por una cantidad hace la resta, pero me resta todos los productos que hay en el inventario cuando solo deberia restar las cervezas pilsen y no me resta por la cantidad que le doy al generar la venta si no que me esta restando por un numero al azar es decir -80 o -100 etc, este es mi codigo no se si le hace falta algo o la consulta esta mal

UPDATE compras INNER JOIN ventas ON compras.ncompra=ventas.nventa
SET compras.cantidadcompra = compras.cantidadcompra - ventas.cantidad WHERE cantidadcompra = $cantidad

Respuestas

Si te actualiza todos los registros del inventario es porque la cláusula del where la tienes mal. La parte del Where te permite limitar los registros que deseas actualizar.

Si te fijas, en tu where estás limitando el update para todos los productos que tengan el campo "cantidadcompra" igual a la variable $cantidad. Eso a todas luces no te va a funcionar, porque la limitación del where tendría que ser por el identificador del producto que se desea actualizar.

Personalmente no entiendo muy bien los nombres de tus tablas (por ejemplo la tabla compra y venta me parecen la misma cosa, la verdad). No entiendo tampoco por qué haces el join, pues en principio no lo veo necesario. Por eso te doy un ejemplo sobre cómo creo que debería ser tu sentencia, con nombres de tablas y columnas que considero más entendibles.

UPDATE product SET stock = stock - 5 where product_id = 103

Esa sería la sentencia, suponiendo que el identificador del producto que deseas actualizar es el 103 y que se desean restar 5 unidades del stock de ese producto.

Sergio
366 11 32 13