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

actualizar campo desde un evento

Estas en el tema de actualizar campo desde un evento en el foro de Mysql en Foros del Web. cordial saludo para todos, tengo la siguiente inquietud: deseo poder actualizar un campo "estado" dependiendo del tiempo trascurrido en dias desde una fecha determinada como ...
  #1 (permalink)  
Antiguo 14/01/2015, 07:21
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 11 años
Puntos: 1
actualizar campo desde un evento

cordial saludo para todos, tengo la siguiente inquietud: deseo poder actualizar un campo "estado" dependiendo del tiempo trascurrido en dias desde una fecha determinada como se muestra en el siguiente código.

Código SQL:
Ver original
  1. SELECT nombre, fecha_factura, CURDATE( ) , TIMESTAMPDIFF(
  2. DAY , fecha_factura, CURDATE( ) ) AS dias_trascurridos
  3. FROM facturas
El campo estado se debe actualizar dependiendo de si los dias trascurridos en <=30, estado es gual a "Al dia" si dias trascurridos es <=60, estado es igual a "Vencida" y si dias trascurridos es >60 el estado es "Juridico".

Aqui el codigo del evento actualizar_estado:
Código MySQL:
Ver original
  1. DELIMITER |    
  2. CREATE EVENT `Actualizar_estado`
  3. ON SCHEDULE EVERY 1 MINUTE 
  4. ON COMPLETION PRESERVE
  5. SELECT nombre, fecha_factura, CURDATE( ) , TIMESTAMPDIFF(
  6. DAY , fecha_factura, CURDATE( ) ) AS dias_trascurridos
  7. FROM facturas
  8. END |
  9. DELIMITER;
__________________
Hebeth Mazuera

Última edición por gnzsoloyo; 14/01/2015 a las 07:30
  #2 (permalink)  
Antiguo 14/01/2015, 07:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: actualizar campo desde un evento

Lo que quieres hacer es un UPDATE condicionado sobre la base de una función... Es totalmente innecesario hacer un SELECT para eso. Lo puedes ejecutar directamente:

Código MySQL:
Ver original
  1. DELIMITER $$    
  2. CREATE EVENT `Actualizar_estado`
  3.     ON SCHEDULE EVERY 1 MINUTE  
  4.     ON COMPLETION PRESERVE DO
  5.  
  6.   UPDATE facturas
  7.   SET estado = IF(TIMESTAMPDIFF(DAY , fecha_factura, CURDATE()) < 60, 'Al dia', IF(TIMESTAMPDIFF(DAY , fecha_factura, CURDATE()) = 60, 'Vencida', 'Juridico'))
  8.   WHERE estado !='Juridico';
  9. END $$
  10. DELIMITER;
__________________
¿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 14/01/2015, 08:12
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 11 años
Puntos: 1
Respuesta: actualizar campo desde un evento

Gracias gnzsoloyo, por tu pronta respuesta, he corrido el código del evento en MyPhpMyAdmin y me muestra este error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$$ DELIMITER' at line 8



Código MySQL:
Ver original
  1. DELIMITER $$    
  2. CREATE EVENT `Actualizar_estado`
  3. ON SCHEDULE EVERY 1 MINUTE  
  4. ON COMPLETION PRESERVE DO
  5.   UPDATE facturas
  6.       SET estado = IF(TIMESTAMPDIFF(DAY , fecha_factura, CURDATE()) <= 30, 'Al dia', IF(TIMESTAMPDIFF(DAY , fecha_factura, CURDATE()) <= 60, 'Vencida', 'Juridico'))
  7.       WHERE estado !='Juridico';
  8. END $$
  9. DELIMITER;

No logro entender cual es el error.
__________________
Hebeth Mazuera

Última edición por gnzsoloyo; 14/01/2015 a las 08:23
  #4 (permalink)  
Antiguo 14/01/2015, 08: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: 17 años
Puntos: 2658
Respuesta: actualizar campo desde un evento

No puedes usar los DELIMITER en phpMyadmin. Sólo en consola de MySQL.

Por otro lado, phpMyadmin no tiene un buen analizador sintáctico. Usa MySQL Workbench, que sí lo tiene y verifica que los paréntesis estén todos bien.
__________________
¿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 14/01/2015, 08:58
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 11 años
Puntos: 1
Respuesta: actualizar campo desde un evento

OK gnzsoloyo, seguire tu sugerencia
__________________
Hebeth Mazuera
  #6 (permalink)  
Antiguo 14/01/2015, 09:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: actualizar campo desde un evento

Si de todos modos quieres usar el phpMyadmin, quita los delimiter y en la ventana de ejecucion de SQL verás abajo un textbox para indicar cual es el delimitador de sentencias que cierra el script.
Alli pon lo que uses, pero NO USES caracteres de uso reservado como el "|". Por eso te lo cambié.

phpMyadmin luego incorpora lo necesario por si mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, evento, fecha, select
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:45.