Darse de alta en la web | Recuperar password   
Inicio / Foros / MySQL / sumar y restar entre tablas mysql
10 respuestas recibidas | 1142 visitas | Categoría MySQL

sumar y restar entre tablas mysql

Avatar de stuzin
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 5 posts)

#0 Offline stuzin Usuario 05 feb 08 (22:34)  
hola, mi problema es el siguiente, estoy creando un programa de gestion de almacen con mysql, en el cual hay una tabla de entradas, otra de salidas y otra de almacen.
lo que quiero hacer es que si se hace una salida se descuente de la tabla de almacen y si se hace una entrada se sume al almacen.

las tablas son practicamente iguales las tres y utilizan los siguientes campos:
id
cantidad
codigo
descripcion
lo que hay q modificar de la tabla de almacen es la cantidad y creo que la condicion para que sepa cual es la fila que tiene que modificar es atraves de el campo de codigo, asi con esa coincidencia modificar el valor de la cantidad.

esto lo quiero hacer a la misma vez que se envia el formulario de entradas o de salidas.

si aluguien quiere ver como esta hecho puede verlos en esta direccion y se puede hacer una idea mas acertada desde esta direccion http://rocco.wesped.es/control/

sumar entre tablas

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#1 Offline jurena Usuario 06 feb 08 (01:26)  
A ver si esto te sirve para sumarlos todos o restarlos todos de una 'tacada'. Ponlo a prueba:
UPDATE almacen, entradas
SET almacen.cantidad=almacen.cantidad + entradas.cantidad WHERE almacen.codigo=entradas.codigo
Y para restar
UPDATE almacen, salidas
SET almacen.cantidad=almacen.cantidad - salidas.cantidad WHERE almacen.codigo=salidas.codigo
Te las hace todas de un golpe. Pero si quieres limitarlo a un solo producto, por ej. al que tiene código 1:
SET almacen.cantidad=almacen.cantidad + entradas.cantidad WHERE almacen.codigo=entradas.codigo AND almacen.codigo = 1
UPDATE almacen, salidas
SET almacen.cantidad=almacen.cantidad - salidas.cantidad WHERE almacen.codigo=salidas.codigo AND almacen.codigo = 1

EDITO PARA CORREGIR:
Como los datos los metes mediante un formulario,
haces dos consultas, una para INSERTAR en cada tabla y otra para ALMACÉN
resulta muy fácil sumar o restar en la tabla almacen mediante una condicional del tipo... en caso de que sea entradas el dato de formulario
INSERT INTO entradas (idproducto, cantidad) VALUES ($codigoformulario, $cantidadformulario)//etc.
y la lanzas;
y luego otra consulta de actualización de datos
UPDATE almacen SET cantidad = cantidad + $cantidadformulario WHERE almacen.codigo=$codigoformulario
y la lanzas
ambos datos te los traes por POST del formulario
en caso de que sea salidas
INSERT INTO salidas (idproducto, cantidad) VALUES ($codigoformulario, $cantidadformulario)//etc.
y la lanzas;
y luego otra consulta de actualización de datos
UPDATE almacen SET cantidad = cantidad - $cantidadformulario WHERE almacen.codigo=$codigoformulario
y la lanzas
ambos datos te los traes por POST del formulario, me refiero a los datos que rellenan las variables $codigoformulario y $cantidadformulario
Así será mejor, olvida la primera propuesta, pensada para tres tablas ya cerradas...

Re: sumar y restar entre tablas mysql

Avatar de stuzin
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 5 posts)

#2 Offline stuzin Usuario 06 feb 08 (21:58)  
el formulario llama a una pagina llamada insrtar_datos_salidas.php que es el que hace las salidas por ejemplo, y lo tengo programado así:

"<?php

// Primero comprobamos que ningún campo esté vacío y que todos los campos existan.

if(isset($_POST['cantidad']) && !empty($_POST['cantidad']) &&

isset($_POST['descripcion']) && !empty($_POST['descripcion']) &&

isset($_POST['obra']) && !empty($_POST['obra']) &&

isset($_POST['codigo']) && !empty($_POST['codigo']) &&

isset($_POST['operario']) && !empty($_POST['operario'])) {



// Si entramos es que todo se ha realizado correctamente



$link = mysql_connect("localhost","root","bucear");

mysql_select_db("koisa",$link);



// Con esta sentencia SQL insertaremos los datos en la base de datos

mysql_query("INSERT INTO salidas (id,cantidad,descripcion,obra,codigo,operario)

VALUES ('{$_POST['id']}','{$_POST['cantidad']}','{$_POST['descripcion']}','{$_POST['obra']}','{$_POST['codigo']}','{$_POST['operario']}')",$link);

}

//con esta sentencia SQL modifico los datos del almacen



mysql_query("UPDATE almacen SET cantidad = cantidad - $cantidadformulario WHERE almacen.codigo=$codigoformulario",$link);



$gracias_defecto="salidas.php";

if (is_null($pagina_gracias)){ header( "Location: $gracias_defecto" );}

else{

## Si hay página de gracias, cárgala

header( "Location: $pagina_gracias" );

}



?>"


creo que no hago algo bien por que solo me hace las salidas pero no modifica nada en la tabla del almacen.

Re: sumar y restar entre tablas mysql

Avatar de stuzin
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 5 posts)

#3 Offline stuzin Usuario 06 feb 08 (22:10)  
ya entontre el fallo

"<?php

// Primero comprobamos que ningún campo esté vacío y que todos los campos existan.

if(isset($_POST['cantidad']) && !empty($_POST['cantidad']) &&

isset($_POST['descripcion']) && !empty($_POST['descripcion']) &&

isset($_POST['obra']) && !empty($_POST['obra']) &&

isset($_POST['codigo']) && !empty($_POST['codigo']) &&

isset($_POST['operario']) && !empty($_POST['operario'])) {



// Si entramos es que todo se ha realizado correctamente



$link = mysql_connect("localhost","root","bucear");

mysql_select_db("koisa",$link);



// Con esta sentencia SQL insertaremos los datos en la base de datos

mysql_query("INSERT INTO salidas (id,cantidad,descripcion,obra,codigo,operario)

VALUES ('{$_POST['id']}','{$_POST['cantidad']}','{$_POST['descripcion']}','{$_POST['obra']}','{$_POST['codigo']}','{$_POST['operario']}')",$link);

}

//con esta sentencia SQL modifico los datos del almacen

mysql_query("UPDATE almacen SET cantidad = cantidad - '{$_POST['cantidad']}' WHERE almacen.codigo='{$_POST['codigo']}'",$link);



$gracias_defecto="salidas.php";

if (is_null($pagina_gracias)){ header( "Location: $gracias_defecto" );}

else{

## Si hay página de gracias, cárgala

header( "Location: $pagina_gracias" );

}



?>"


muchisimas gracias por gran ayuda, andube navegando por varios foros y nadie supo encontrar la solucion

varias cosas

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#4 Offline jurena Usuario 06 feb 08 (22:13)  
escribes una llave de cierre del if en el lugar no indicado.

Código PHP


// Con esta sentencia SQL insertaremos los datos en la base de datos

mysql_query("INSERT INTO salidas (id,cantidad,descripcion,obra,codigo,operario)

VALUES ($_POST['id'],$_POST['cantidad'],'{$_POST['descripcion']}','{$_POST['obra']}','{$_POST['codigo']}','{$_POST['operario']}')",$link);//ojo, porque los campos numéricos de MySQL debes cargarlos con una variable sin comillas. Observa que las he quitado de $POST_['id'] y de la cantidad, pues imagino que serán numéricos.


mysql_query("UPDATE almacen SET cantidad = cantidad - $_POST ['cantidad'] WHERE almacen.codigo=$_POST ['codigo']",$link);//has puesto los mismos nombres que te puse yo. Los nombres de tablas y campos debes acomodarlos a lo traído de tu formulario y a los campos de las tablas de tu base de datos. Imagino que codigo es un campo texto en tus tablas, aunque si no lo es, tendrías que quitar también las comillas

}//cierras el if después, no antes.


EDITO: me alegro de que ya te haya funcionado, pero ten cuidado con la naturaleza de los campos, si no quieres encontrarte con sorpresas luego.
Saludos.

Re: sumar y restar entre tablas mysql

Avatar de stuzin
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 5 posts)

#5 Offline stuzin Usuario 07 feb 08 (21:45)  
puedes explicarme por que eso de las comillas??
y son numericos los campos id, cantidad, obra y codigo, asi que tambien le quitare las comillas.
cuando te refieres a sorpresas hablas de que alguien puede modificarme la bd?

sumar y restar

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#6 Offline jurena Usuario 07 feb 08 (23:53)  
No, no me refiero a la inyección de SQL (injection), sino al hecho de que si desde PHP intentas guardar en un campo numérico MySQL un dato cargado en una variable con comillas (ej. '$num'), no sólo no guardará ese dato, sino ningún otro de esa consulta. Deberás escribir $num. A eso me refiero.
Suerte, stuzin

toy en lo mismo

Avatar de dantrix
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 29 posts)

#7 Offline dantrix Usuario 05 abr 08 (17:56)  
holas stuzin,
estoy en lo mismo, realizando un sistema de almacenes, aun no lo he terminado , peor va a avanzado, quizas podemos compartir experiencias y algo de codigo, aun no leo todo el hilo, pero lo descarog y lo leeo en mi casa mas ctranquilo.

por cierto mi mail es dantrix2006 (at) gmail (dot) com

mi sistema esta casi funcionando en :
http://dantrix2006.iespana.es/

saludos

Re: sumar y restar entre tablas mysql

Avatar de stuzin
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 5 posts)

#8 Offline stuzin Usuario 05 abr 08 (18:38)  
ya consegui que funcionara bien y que hiciera lo que queria, así que tienes alguna duda pregunta lo que quieras

Un saludo stuzin

compartimos sistemas

Avatar de dantrix
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 29 posts)

#9 Offline dantrix Usuario 08 abr 08 (19:11)  
bueno ya ha he publicado el zip por algun lado, pero aun esta en su version 0.95 me falta arreglar una cosa de los costos,cosa que puedes ver en este post : http://www.php-hispano.net/foros/MySQL/29308

cuando lo termine lo pienso publicar derepente a alguien le sirve,

a ver si derepente publicas el tuyo?

saludos

Re: sumar y restar entre tablas mysql

Avatar de arraiz_79
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 1 posts)

#10 Offline arraiz_79 Usuario 17 abr 08 (21:37)  
hola compañeros, mi problema es similar al de stuzin, estoy realizando una gestion de inventario, y querria actualizar el campo stock de una tabla restandole el campo unidades de la tabla pedido. He probado con la sentencia UPDATE pero no consigo actualizar el campo. si me pudieras ayudar estaria muy agradecido. Un saludo y gracias de antemano

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster