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

Problema con trigger

Estas en el tema de Problema con trigger en el foro de Mysql en Foros del Web. Hola tengo un problema, necesito sumar en una tabla que tengo todos los campos de una sola columna y ponerlos en un campo llamado resultado, ...
  #1 (permalink)  
Antiguo 02/11/2012, 10:03
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta Problema con trigger

Hola tengo un problema, necesito sumar en una tabla que tengo todos los campos de una sola columna y ponerlos en un campo llamado resultado, pero a esos datos tambien les tengo que sumar el resultado del id anterior ejemplo:

---------------------------------
nombre |campo1|campo2|campo3|resultado |
juan____| 1_____| 2_____| 3_____| 6_____|
juan____| 2_____| 4_____| 1_____| 13_____|


esto lo tengo que hacer por medio de un trigger, espero me puedan ayudar de antemano gracias
  #2 (permalink)  
Antiguo 02/11/2012, 12:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con trigger

Hay algunos errores conceptuales en lo que propones hacer:
- No se guardan de una base de datos valores calculables, entendiendo por tales aquellos valores que pueden ser calculados al momento de consultar los datos.
En tu caso, estás planteando guardar la suma de los mismos campos del registro... lo cual termina siendo un verdadero despropósito.
¿Para qué guardar eso, si el mismo resultado lo obtienes así:
Código MySQL:
Ver original
  1. SELECT nombre, campo1, campo2, campo3, (campo1 + campo2 + campo3) resultado
  2. FROM tabla;
De hecho, ni aún cuando fueses a guardar ese dato resulta funcional hacer un TRIGGER para eso, por cuanto que también podrías hacer el INSERT de esta forma:
Código MySQL:
Ver original
  1. INSERT INTO tabla
  2. VALUES(Valor_nombre, Valor_campo1, Valor_campo2, Valor_campo3, (Valor_campo1 + Valor_campo2 + Valor_campo3));

Los valores calculables no se guardan porque no aportan absolutamente ninguna ventaja tenerlos en un campo, y pueden traer aparejados problemas de consistencia de datos si alguno de los valores de origen se modifica. En ese caso requiere programar rutinas de mantenimiento de consistencia, y además realizar verificaciones adicionales cada vez que se accede a ellos para validar que el dato sea correcto respecto de los datos fuente.
Es muchísimo más sencillo crear VIEWs para que muestren el valor directamente, y siempre actualizado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/11/2012, 13:41
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con trigger

hola gracias por la respuesta, lo que propones es que cree una vista donde en resultado le ponga la suma de campo1, campo2 y campo tres?

pero lo que requiero es que en resultado tambien me muestre la suma del resultado anterior, es decir en la tabla en el id=1 tengo campo1=1, campo2=2 y campo3=3 entonces el resultado seria la suma de 1+2+3 que es 6
Luego en el id=2 tengo campo1=2, campo2=4 y campo3=1 el resultado tiene que ser la suma de 2+4+3+6(resultado anterior en id=1), y asi sucesivamente cada vez que agregue un nuevo campo el resultado tiene que ser la suma del campo1,2 y 3 mas la suma del resultado anterior
  #4 (permalink)  
Antiguo 02/11/2012, 13:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con trigger

Cita:
pero lo que requiero es que en resultado tambien me muestre la suma del resultado anterior, es decir en la tabla en el id=1 tengo campo1=1, campo2=2 y campo3=3 entonces el resultado seria la suma de 1+2+3 que es 6
Luego en el id=2 tengo campo1=2, campo2=4 y campo3=1 el resultado tiene que ser la suma de 2+4+3+6(resultado anterior en id=1), y asi sucesivamente cada vez que agregue un nuevo campo el resultado tiene que ser la suma del campo1,2 y 3 mas la suma del resultado anterior
Eso se sigue pudiendo lograr en una consulta...
De todos modos estás dando una explicación tan genérica, tan abstracta, que es difícil saber si estás analizando correctamente el problema que debes resolver.
Llegado a este punto, sería mucho más fácil que nos expliques el caso real, para ver si la estrategia que piensas es la mejor.
A mi entender, una simple consulta (aunque no sea una consulta simple), será mejor que guardar trash data.

Explica el escenario real y veamos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 02/11/2012, 14:20
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con trigger

ver enlace:

https://www.facebook.com/photo.php?fbid=369584229795823&set=a.3695842231291 57.92232.147747571979491&type=1&theater

Para sacar el resultado marcado en la casilla roja es necesario sumar el balance anterior (casilla verde) mas el deposito (casilla azul) menos el retiro (casilla amarilla)
Lo que quedaría Balance=balance anterior+deposito-retiro
  #6 (permalink)  
Antiguo 02/11/2012, 14:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con trigger

con una sola consulta sería algo como:

Código MySQL:
Ver original
  1. SELECT campo1, campo2, campo3, (@total:=campo1+campo2+campo3) total
  2. FROM tabla JOIN (SELECT @total:=0) t1
  3. WHERE condiciones;

Pero es posible que se pueda lograr cosas mejores.

Esta noche reviso ese link.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 02/11/2012, 14:26
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con trigger

ver enlace:

https://www.facebook.com/photo.php?fbid=3871241261227&set=a.1758593566355.2 089616.1284496070&type=1&theater

Para sacar el resultado marcado en la casilla roja es necesario sumar el balance anterior (casilla verde) mas el deposito (casilla azul) menos el retiro (casilla amarilla)
Lo que quedaría Balance=balance anterior+deposito-retiro
  #8 (permalink)  
Antiguo 02/11/2012, 15:57
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Problema con trigger

gnzsoloyo sos el dios del sql a veces leo las cosas que pones y me quedo helado jajaja me resulta muy interesante esta consulta la podrias explicar detalladamente?
  #9 (permalink)  
Antiguo 02/11/2012, 17:22
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con trigger

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, gnzsoloyo muchas gracias por la ayuda, espero me sigas ayudando con este problema
  #10 (permalink)  
Antiguo 05/11/2012, 15:41
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con trigger

ya realice la consulta y me muestra el resultado del campo1 + campo2 + campo 3, pero no me muestra la suma del resultado anterior

Código MySQL:
Ver original
  1. SELECT campo1, campo2, campo3, (@total:=campo1+campo2+campo3) total
  2. FROM tabla JOIN (SELECT @total:=0) t1
  3. WHERE condiciones;
  #11 (permalink)  
Antiguo 05/11/2012, 16:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con trigger

Código MySQL:
Ver original
  1. SELECT campo1, campo2, campo3, @total SumaAnterior, (@total:=@total+campo1+campo2+campo3) total
  2. FROM tabla JOIN (SELECT @total:=0) t1
  3. WHERE condiciones;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 05/11/2012, 17:12
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con trigger

gracias eres todo un master en la programación me sacaste de un gran apuro
  #13 (permalink)  
Antiguo 05/11/2012, 18:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con trigger

Naaa.
"Como todo, Pedro. Práctica", como decía Juan Salvador Gaviota...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 05/11/2012, 20:03
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con trigger

disculpa la molestia pero si esto lo quisiera usar con un insert into como tendría que modificar el código?
esto es con la intención de meter el resultado en un campo de la base de datos y que cada vez que se inserten tres nuevos campos el resultado siempre se este guardando en la base de datos

Código MySQL:
Ver original
  1. SELECT campo1, campo2, campo3, @total SumaAnterior, (@total:=@total+campo1+campo2+campo3) total
  2. FROM tabla JOIN (SELECT @total:=0) t1
  3. WHERE condiciones;

Última edición por juan_aalberto; 05/11/2012 a las 22:05
  #15 (permalink)  
Antiguo 06/11/2012, 17:03
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta Respuesta: Problema con trigger

lo e puesto de la siguiente manera pero me marca error :(
Código MySQL:
Ver original
  1. INSERT INTO tabla (resultado)
  2. SELECT (@total:=@total+a+b+c) total
  3. FROM links JOIN (SELECT @total:=0) t1;
  #16 (permalink)  
Antiguo 07/11/2012, 14:31
 
Fecha de Ingreso: octubre-2012
Ubicación: Durango
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con trigger

me inserta 12 campos vacios la consulta que puse anteriormente porque es esto?

Etiquetas: tabla, trigger, campos
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 02:02.