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

comprobar si existe un registro dentro de un bucle mysql

Estas en el tema de comprobar si existe un registro dentro de un bucle mysql en el foro de Bases de Datos General en Foros del Web. Hola. mi consulta es como puedo comprobar si existe un registro dentro de un bucle este procedemiento, si existe no inserte de lo contrario inserte. ...
  #1 (permalink)  
Antiguo 28/12/2009, 15:21
 
Fecha de Ingreso: abril-2006
Mensajes: 240
Antigüedad: 18 años, 7 meses
Puntos: 1
comprobar si existe un registro dentro de un bucle mysql

Hola.
mi consulta es como puedo comprobar si existe un registro dentro de un bucle este procedemiento, si existe no inserte de lo contrario inserte.

Código PHP:
DELIMITER $$

DROP PROCEDURE IF EXISTS CNRP_FERIADO $$

CREATE PROCEDURE CNRP_FERIADO(IN idferiados INT(11),
                  
IN fechas VARCHAR(1250), 
                  
IN tipos TINYINT
                  
IN numm TINYINT)
BEGIN
DECLARE  validar INT;
DECLARE  
estado INT;
DECLARE  
fechs VARCHAR(15);

IF 
numm 1 THEN
    
WHILE LENGTH(fechas) > DO
    
SET fechs SUBSTRING_INDEX(fechas','1);
        
SET fechas SUBSTR(fechasLENGTH(fechs)+2);
      
       
//aca es donde quiero comprobar si existe el registro....

    
INSERT INTO t_feriado(fechaferiadotipoferiado)VALUES(fechs1);    
    
END WHILE;
END IF;

END$$

DELIMITER 
  #2 (permalink)  
Antiguo 28/12/2009, 15: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: 17 años
Puntos: 2658
Respuesta: comprobar si existe un registro dentro de un bucle mysql

Simplemente no creo que te funcione porque el parámetro fechas debería ser un TEXT, y los SP en MySQL no los admiten como entrada. Esto es por la presencia de comas dentro del parámetro. Ese tipo de símbolos, para usarlos como los pones, requieren BLOB o TEXT. Para el caso es lo mismo.
Si aún así quieres probar, las forma sería mas o menos:

DELIMITER $$

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS CNRP_FERIADO $$
  2.  
  3. CREATE PROCEDURE CNRP_FERIADO(IN idferiados INT(11),
  4.                   IN fechas VARCHAR(1250),
  5.                   IN tipos TINYINT,
  6.                   IN numm TINYINT)
  7. DECLARE  validar INT;
  8. DECLARE  estado INT;
  9. DECLARE  fechs VARCHAR(15);
  10.  
  11. IF numm = 1 THEN
  12.     WHILE LENGTH(fechas) > 0 DO
  13.     SET fechs = SUBSTRING_INDEX(fechas, ',', 1);
  14.         SET fechas = SUBSTR(fechas, LENGTH(fechs)+2);
  15.      
  16.        IF (SELECT fechaferiado FROM T_feriado WHERE fechaferiado = fechs) IS NULL THEN
  17.            INSERT INTO t_feriado(fechaferiado, tipoferiado)VALUES(fechs, 1);    
  18.        END IF;
  19.  
  20.     END WHILE;
  21.  
  22. END$$
DELIMITER ;

Lo que pareces estar tratando de hacer es ingresar un conjunto de fechas en un parámetro, separadas por comas, y luego separarlas para ingresarlas una a una. Si esa es la idea, antes de ellos te sugeriría que crearas en el script de PHP un INSERT múltiple, con control de IGNORE, o bien de ON DUPLICATE KEY.
Un INSERT múltiple es una sentencia INSERT escrita de esta forma:
Código MySQL:
Ver original
  1. INSERT INTO a(campos)
  2. VALUES(valores),
  3.    (valores),
  4.    (valores),
  5.    (valores),
  6.    (valores),
  7.    (valores);
En tu caso habría que probar INSERT IGNORE, para que no genere errores de clave duplicada:
Código MySQL:
Ver original
  1. INSERT IGNORE INTO a(campos)
  2. VALUES(valores),
  3.    (valores),
  4.    (valores),
  5.    (valores),
  6.    (valores),
  7.    (valores);
No lo he probado nunca con un ON DUPLICATE KEY siendo un ISERT múltiple. Habría que intentarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 28/12/2009 a las 16:03
  #3 (permalink)  
Antiguo 29/12/2009, 06:45
 
Fecha de Ingreso: abril-2006
Mensajes: 240
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: comprobar si existe un registro dentro de un bucle mysql

gnzsoloyo
probe el script y funko perfectamente, el de no insertar si ya esta registrado, lo otro claro es como dices, separador por comas las fechas y las inserto en varias filas, a cual hasta ahora me ha funcionado perfecto.

aca por normativa todo se debe manejar por bdd y no en php o lenguaje de servidor, = gracias por tus comentarios

se agradecen

saludos
  #4 (permalink)  
Antiguo 29/12/2009, 07:09
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: comprobar si existe un registro dentro de un bucle mysql

OK. Me alegro que sirviera, ya que posiblemente lo incorpore como alternativa en algunos procesos de una base que todavía tenemos en desarrollo.
Saludos..

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 23:23.