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

operación con un campo anterior en mysql

Estas en el tema de operación con un campo anterior en mysql en el foro de Mysql en Foros del Web. tengo una tabla en la base de datos que tiene 3 campos los cuales son cargo abono y balance el balance se calcula sacando la ...
  #1 (permalink)  
Antiguo 05/11/2012, 13:08
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta operación con un campo anterior en mysql

tengo una tabla en la base de datos que tiene 3 campos los cuales son cargo abono y balance

el balance se calcula sacando la resta de los valores que hay en cargo y en abono

entonces si en cargo tengo un valor igual 2 y en abono tengo un valor igual a 1 el balance seria igual a 1

pero al ingresar un nuevo cargo y abono el balance seria la resta del cargo mas el abono mas el resultado del balance anterior

y el total de cada balance lo tengo que dejar guardado en una segunda tabla, por eso creo que necesito tener el valor de cada balance guardado en la base de datos

hice un trigger que me calcula la resta del cargo y el abono pero no se como hacerle para que me sume tambien el resultado del balance obtenido anteriormente es decir el balance del id anterior
el triger que tengo es el siguiente:

Código:
 CREATE TRIGGER suma BEFORE INSERT ON links 

FOR EACH ROW BEGIN 


set new.balance:=IFNULL(new.cargo,0)-IFNULL(new.abono,0);
END;
a esto le tengo que sumar el balance del id anterior que seria algo así
Código:
 CREATE TRIGGER suma BEFORE INSERT ON links 

FOR EACH ROW BEGIN 


set new.balance:=IFNULL(new.cargo,0)-IFNULL(new.abono,0)-balance del id anterior;
END;
  #2 (permalink)  
Antiguo 05/11/2012, 13:48
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: operación con un campo anterior en mysql

para lograr obtener el campo anterior tengo que trabajar con variables?
  #3 (permalink)  
Antiguo 06/11/2012, 02:36
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: operación con un campo anterior en mysql

¿Por qué no haces la suma de todos los cargos y le restas la suma de todos los abonos? Así no tienes que usar el balance anterior. De todas formas, ¿Cuál es tu estructura de datos? ¿Dónde guardas el balance? ¿En la misma tabla que el cargo y el abono? Eso no sería correcto ya que el balance es global, no parcial de cada movimiento.
  #4 (permalink)  
Antiguo 06/11/2012, 09:25
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: operación con un campo anterior en mysql

si los guardo en la misma tabla ya que cada que se agrega un nuevo cargo y un nuevo abono el balance siempre va cambiando, y después en otras tablas tengo que poner nuevamente el resultado obtenido de cada operación
  #5 (permalink)  
Antiguo 07/11/2012, 14:33
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: operación con un campo anterior en mysql

alguna idea de como solucionar ese problema?
  #6 (permalink)  
Antiguo 07/11/2012, 15:30
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: operación con un campo anterior en mysql

Hola juan_aalberto:

En primer lugar explícame ¿por qué tienes que tener el campo balance en tu tabla? esto es un terrible error de diseño... un campo que puede ser calculado NO DEBE EXISTIR, POR NINGÚN MOTIVO, EN UNA TABLA... si estuvieras haciendo un examen de diseño de base de datos y haces esto seguramente estarías reprobado... si plantearas esto en una empresa, seguramente te expondrías a ser despedido... así de grave es la cosas.

Ahora bien, muchas veces el modelo de BD no depende de nosotros y no hay forma de que podamos modificar la estructura de las tablas, sin embargo por el planteamiento que le estás dando al problema creo que no es el único problema de diseño que tienes...

Por ejemplo, no creo conveniente que en una sola tabla estés hablando de dos conceptos que son completamente contrarios, como lo son CARGOS y ABONOS... la naturaleza de estas cuentas es contraria completamente... aunque hay muchas maneras de poder modelar un sistema de contabilidad, por lo general se manejan en tablas separadas los cargos y los abonos...

Creo que más que es conveniente que nos expliques mejor qué es lo que intentas hacer con tu sistema, es decir, si se trata de un sistema para contabilidad, para inventarios, para nómina, etc... partiendo del problema (y si tienes posibilidades) podrías comenzar por definir un mejor modelo de BD's y evitarte muchos problemas, como los que veo que estás teniendo...

Y una recomendación final, veo que abriste 4 post's con temas muy parecidas... podría asegurar incluso que se trata del mismo problema... NO DEBES DUPLICAR TEMAS... esto te podría generar sanciones por parte de los administradores del sitio. Mucho ojo con eso.

Además, es recomendable que en tus posts pongas la estrucrura completa de tus tablas y si es posible algunos datos de ejemplo... de esta manera podemos recrear el escenario y ayudarte con las consultas... de otra manera estaríamos adivinando lo que tienes y es posible que no te podamos dar una respuesta puntual.

Saludos
Leo.
  #7 (permalink)  
Antiguo 07/11/2012, 16:46
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: operación con un campo anterior en mysql

hola primero gracias por tus observaciones, soy nuevo en el foro y hay ciertas reglas del foro que aún no se perdón por lo de los temas no volverá a suceder, lo que pasa es que me encuentro haciendo mis residencias en una empresa y al momento de realizar mi análisis hubo ciertas dudas acerca de como acomodar las tablas ya que por ejemplo en un tabla cada que se mete un cargo y un abono se realizan las operaciones necesarias para sacar el balance y de nuevo al insertar un nuevo cargo y abono se tienen que realizar de nuevo operaciones para sacar un nuevo balance y así sucesivamente, al final se saca la suma de cada balance que se fue calculando y todo eso queda guardado en una sola tabla.

ejemplo:

DEPOSITOS RETIROS BALANCE
1,275,284.04 123.00 1,275,161.04
2,522.00 1,272,639.04
403.52 1,272,235.52 ----------------
15,058.20 1,257,177.32
2,201.00 1,254,976.32
1,962.00 1,253,014.32
--------- 1,253,014.32
7,987.50 1,245,026.82
1,550.00 1,243,476.82
1,993.00 1,241,483.82
820,281.52 2,061,765.34
180,000.00 2,241,765.34


total balance=16,871,736.02

el sistema lo estoy haciendo en cakephp
se como meter consultas simples en cakephp
pero como no se meter las vistas en las vistas de cakephp metí el balance como campo en mi base de datos para poder insertarle los datos directamente desde la base de datos y así ya no meterme con el código de cakephp, la solución seria encontrar la manera de meter mi consulta en cakephp o meter el resultado de la vista generada en un campo de la base de datos, la consulta que tengo es la siguiente:


Código MySQL:
Ver original
  1. SELECT (@total:=@total+cargo-abono+c) total
  2. FROM links JOIN (SELECT @total:=0) t1;

y nuevamente gracias por responder y por las observaciones.
  #8 (permalink)  
Antiguo 07/11/2012, 21:37
 
Fecha de Ingreso: marzo-2012
Mensajes: 53
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: operación con un campo anterior en mysql

Hola, prueba asi : (suponiendo que tienes un campo fecha)
Código MySQL:
Ver original
  1. SET @total:=0;
  2. SELECT fecha,cargo,abono,(SELECT @total:=@total +(cargo-abono)) saldo
  3.  FROM mitabla
  4.    ORDER BY fecha;
Saludos

Etiquetas: tabla, campos, anteriores
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 16:53.