Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Como restar un valor de varios campos

Estas en el tema de Como restar un valor de varios campos en el foro de Mysql en Foros del Web. Buenas noches compañeros, quisiera que me pudieran ayudar, expongo mi caso tengo una tabla que llamaré venta en ella ingreso los siguientes datos @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 03/07/2014, 18:56
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Pregunta Como restar un valor de varios campos

Buenas noches compañeros, quisiera que me pudieran ayudar, expongo mi caso

tengo una tabla que llamaré venta en ella ingreso los siguientes datos
Código MySQL:
Ver original
  1. VENTA
  2. IDPROD | CANTIDAD | PRECIO | FECHA
  3.   150  |    100   |  10.45 | 2014-07-03
La cantidad se la restaré a mi vitacora de existencias y costos

Código MySQL:
Ver original
  1. VITACORA DE EXISTENCIAS
  2. IDPROD | CANTIDAD | PRECIO | FECHA
  3.   150  |       45 |  10.15 | 2014-07-01
  4.   150  |      200 |  10.05 | 2014-07-02

La idea es que busque en existencias el IDPROD que se está solicitando, que rebaje los 45 del inventario antiguo y los 65 del que le sigue y así sucesivamente hasta que complete los 100 que se requieren, que a los 200 (los cuales fueron los que complementaron) se le reste los 65, actualice la cantidad (es decir que en lugar de 200 quede 145) y que vaya eliminando los que quedan con valor 0

Como debo hacer estas consultas.

Se que es mucho pedir pero espero que me puedan ayudar
  #2 (permalink)  
Antiguo 04/07/2014, 02:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Como restar un valor de varios campos

Lo que pretendes es aplicar LIFO (last input firts output) a tu gestión de almacen, primero agregaría una PK a la tabla de vitacora, y luego con ORDER BY sobre la fecha y LIMIT 1 puedes obtener el registro donde restar la salida con un UPDATE sobre el registro seleccionado, de ahí la importancia de la PK. En función de si la salida es mayor o menor a ese stock deberás buscar un segundo registro para restar la parte restante. Yo lo solucionaria con programación externa, necesitas un bucle que vaya eligiendo los registros donde borrar y una variable de control que te vaya diciendo la cantidad restante, el bucle debe terminar cuando esa variable sea cero.

La solución en programación externa es off topic de este foro.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 04/07/2014, 08:27
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: Como restar un valor de varios campos

Bueno no puse el PK porque se sobre entiende que tiene pero tenes razón debo trabajar una variable en php que se reste hasta llegar a cero como decís...

gracias por tu sugerencia.
Cita:
Iniciado por quimfv Ver Mensaje
Lo que pretendes es aplicar LIFO (last input firts output) a tu gestión de almacen, primero agregaría una PK a la tabla de vitacora, y luego con ORDER BY sobre la fecha y LIMIT 1 puedes obtener el registro donde restar la salida con un UPDATE sobre el registro seleccionado, de ahí la importancia de la PK. En función de si la salida es mayor o menor a ese stock deberás buscar un segundo registro para restar la parte restante. Yo lo solucionaria con programación externa, necesitas un bucle que vaya eligiendo los registros donde borrar y una variable de control que te vaya diciendo la cantidad restante, el bucle debe terminar cuando esa variable sea cero.

La solución en programación externa es off topic de este foro.

Etiquetas: bases-de-datos, restar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:11.