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

Es posible crear un INSERT y un UPDATE dentro de un IF?

Estas en el tema de Es posible crear un INSERT y un UPDATE dentro de un IF? en el foro de Mysql en Foros del Web. Hola amigos, tengo una duda la cual siento si es posible me ahorraria codigo en validaciones php, se puede hacer esto: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: ...
  #1 (permalink)  
Antiguo 08/11/2012, 10:17
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 14 años, 2 meses
Puntos: 9
Exclamación Es posible crear un INSERT y un UPDATE dentro de un IF?

Hola amigos, tengo una duda la cual siento si es posible me ahorraria codigo en validaciones php, se puede hacer esto:


Código MySQL:
Ver original
  1. SELECT * FROM pagos
  2.     IF(CONCEPTO = 'ENERO' AND FECHA_SALDADA < DATE_FORMAT(FECHA_SALDADA, '2013-%m-%d') AND IDUSER = 55)  ,
  3.                 UPDATE pagos SET baja = IF(CONCEPTO = 'ENERO' AND FECHA_SALDADA < DATE_FORMAT(FECHA_SALDADA, '2013-%m-%d'), 1, 2)   ,
  4.                                INSERT INTO pagos (IDUSR,CONCEPTO,MONTO,FECHA,FECHA_SALDADA) VALUES (55, 'ENERO' ,'200','0000-00-00 00:00:00','2012-11-08 00:00:00'))
Lo que hace es valida si existe un concepto igual a enero , que sea menor a 2013 y que el id sea 55, si lo es realiza un UPDATE, de lo contrario realiza un INSERT.

Ingreso este query pero no jala, es posible crear algo parecido?

Muchas, gracias!!

Última edición por gnzsoloyo; 08/11/2012 a las 10:43
  #2 (permalink)  
Antiguo 08/11/2012, 10:43
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: Es posible crear un INSERT y un UPDATE dentro de un IF?

En MySQl esto no se puede hacer.
Ese tipo de tareas se realiza por medio de stored procedures, a los que desde el lenguaje se invoca sin problemas, como si fuera una simple sentencia.
__________________
¿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 08/11/2012, 10:51
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 9 meses
Puntos: 47
Respuesta: Es posible crear un INSERT y un UPDATE dentro de un IF?

Si lo que haces es verificar a lo largo de tu tabla si existe el concepto enero y la fecha saldada vas a tener que usar en primer lugar un stored procedure y en segundo lugar un cursor para recorrer tu tabla, el IF dentro del SELECT hasta donde se, se usa para filtrar lo que se elige x ej:

SELECT IF (tipoUsuario=1,'Administrador','Usuario') AS tipoDeUsuario;

Deberrias usar algo como esto:

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `ejemplo`()
  4.     DECLARE done INT DEFAULT 0;
  5.     DECLARE SP_CONCEPTO CHAR(16);
  6.     DECLARE SP_FECHA_SALDADA DATE;
  7.     DECLARE SP_IDUSER INT;
  8.     DECLARE cur1 CURSOR FOR SELECT IDUSER,CONCEPTO,FECHA_SALDADA FROM pagos;
  9.    
  10.     OPEN cur1;
  11.    
  12.         REPEAT
  13.        
  14.             FETCH cur1 INTO SP_IDUSER, SP_CONCEPTO, SP_FECHA_SALDADA;
  15.            
  16.                 IF(SP_CONCEPTO = 'ENERO' AND SP_FECHA_SALDADA < DATE_FORMAT(SP_FECHA_SALDADA, '2013-%m-%d') AND SP_IDUSER = 55) THEN
  17.                    
  18.                     IF(SP_CONCEPTO = 'ENERO' AND SP_FECHA_SALDADA < DATE_FORMAT(SP_FECHA_SALDADA, '2013-%m-%d'), 1, 2) THEN
  19.                        
  20.                         SET @resultado = 1;
  21.                    
  22.                     ELSE
  23.                    
  24.                         SET @resultado = 2;        
  25.                    
  26.                     END IF;  
  27.                    
  28.                     UPDATE pagos SET baja = @resultado;
  29.                
  30.                 ELSE
  31.                
  32.                     INSERT INTO pagos (IDUSR,CONCEPTO,MONTO,FECHA,FECHA_SALDADA) VALUES (55, 'ENERO' ,'200','0000-00-00 00:00:00','2012-11-08 00:00:00');
  33.                
  34.                 END IF;
  35.                
  36.         UNTIL done END REPEAT;
  37.  
  38.   CLOSE cur1;
  39.  

No lo he probado pero se que errores de sintaxis no tiene si no te resulta investiga un poco mas sobre los cursores.

Salu2
  #4 (permalink)  
Antiguo 08/11/2012, 10:57
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: Es posible crear un INSERT y un UPDATE dentro de un IF?

Recorrer la tabla con un cursor parece innecesario para determinar lo que se necesita. Sólo tienes que ajustar la consulta requerida.
El uso de cursores para realizar la busqueda de un único registro no es una buena decisión si es posible afinar la parametrización del SELECT.
Algo como:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE actakuzapago(IN idusr INT, IN yr INT, IN cpt VARCHAR(50))
  3.     DECLARE fech DATE;
  4.     DECLARE conc VARCHAR(50);
  5.     SELECT FECHA_SALDADA, CONCEPTO
  6.     FROM pagos
  7.     WHERE IDUSER = 55
  8.     INTO fech, conc;
  9.     IF  conc = cpt AND YEAR(fech) <yr
  10.         UPDATE pagos
  11.         SET baja = 1
  12.         WHERE IDUSER = 55;
  13.     ELSE
  14.         INSERT INTO pagos (IDUSR, CONCEPTO, MONTO, FECHA, FECHA_SALDADA)
  15.         VALUES (idusr, cpt ,'200','0000-00-00 00:00:00',CURDATE());
  16.     END IF;
  17. END$$
  18. 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)
  #5 (permalink)  
Antiguo 08/11/2012, 13:03
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 14 años, 2 meses
Puntos: 9
Respuesta: Es posible crear un INSERT y un UPDATE dentro de un IF?

jajaja nombre mis respetos, si que son buenos, MUCHAS GRACIAS, voy a estudiar esos codigos y comentare si tengo dudas esto de los store procedures es nevo para mi xD

Etiquetas: insert, juntos, select, update
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 06:14.