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

trigger que obtiene un registro pasado completo

Estas en el tema de trigger que obtiene un registro pasado completo en el foro de Mysql en Foros del Web. hola a todos! les consulto ahora mi duda estoy haciendo un trigger que me permita comparar los datos que estoy insertando en una tabla con ...
  #1 (permalink)  
Antiguo 09/08/2012, 14:42
 
Fecha de Ingreso: septiembre-2010
Ubicación: Caracas
Mensajes: 83
Antigüedad: 13 años, 7 meses
Puntos: 6
trigger que obtiene un registro pasado completo

hola a todos! les consulto ahora mi duda

estoy haciendo un trigger que me permita comparar los datos que estoy insertando en una tabla con los ultimos datos (el que tiene la fecha mas reciente) de la misma tabla con el mismo nombre (en este caso es un nombre de una cola de llamadas)

una fila de esta tabla tiene el nombre, la fecha y una serie de estadisticas.

Lo que estoy haciendo es comparar si la nueva estadistica es mayor a la pasada, se la resto y asi obtengo la diferencia para que la estadistica no sea acumulativa (ya que asi la obtengo de otra fuente)

en fin, despues de tanto palabreo, un extracto de lo que tengo por ahora

Código:
delimiter //
CREATE TRIGGER prueba BEFORE INSERT ON basededatos.rol
FOR EACH ROW
BEGIN
    SET @val = (SELECT valor FROM rol ORDER BY fecha DESC LIMIT 1);
    
    IF NEW.valor >= @val THEN SET NEW.valor = NEW.valor - @val;
    END IF;
END
//
Todo funciona muy bien, pero resulta que eso lo tengo que hacer con otros 8 campos mas o menos, de la misma fila que obtengo ordenando por fecha
lo que se me ocurre es una forma de hacer un select y a su vez asignar a valores temporales, no existe la manera de hacer un select y obtener esos valores que trae el select?

SELECT * FROM rol ORDER BY fecha DESC LIMIT 1 y cada campo ponerlo en una variable @var1, @var2, etc...
asi solo tendría que hacer un select, ya que creo que si hago
SET @val1 = (SELECT valor1 FROM rol ORDER BY fecha DESC LIMIT 1);
SET @val2 = (SELECT valor2 FROM rol ORDER BY fecha DESC LIMIT 1);

por ejemplo, supongo que seria muy fuerte para la base de datos ya que tendria como 8 selects dentro de un insert que se ejecuta con un insert, y a su vez por fuera ejecuto ese insert como 10 veces, es decir 10 inserts * 8selects

Gracias por la ayuda, si no es posible lo que quiero hacer pues bueno, igual vale!
  #2 (permalink)  
Antiguo 09/08/2012, 15:20
 
Fecha de Ingreso: septiembre-2010
Ubicación: Caracas
Mensajes: 83
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: trigger que obtiene un registro pasado completo

Bueno he encontrado la solucion
el truco esta en asignar con INTO los valores del select en variables temporales

delimiter //
CREATE TRIGGER prueba BEFORE INSERT ON asteriskcdrdb.rol
FOR EACH ROW
BEGIN
SELECT valor, nombreRol INTO @valor1, @valor2 FROM basededatos.rol ORDER BY fecha DESC LIMIT 1;

IF NEW.valor >= @valor1 THEN
SET NEW.nombreRol = @valor2;
SET NEW.valor = NEW.valor - @valor1;
END IF;
END
//

pueden borrar este post :) gracias

Etiquetas: completo, registro, select, 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 12:00.