Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faire un insert query dans une boucle en mysql

Sujet résolu
    2 mai 2021 à 22:21:47

    Bonjour, 

    Je suis en train d'effectuer un insert query dans une boucle à partir de d'une requête select. Le problème est que lorsque la requête select renvoie seulement une ligne je peux le sauver dans un INTO et l'insertion se fait correctement. Mais lorsque la requête select renvoie plusieurs ligne ça ne fonctionne pas. J'ai essayé avec la fonction GROUP_CONCAT mais en vain.

    Voici ce qui est demandé : 

    La fonction doit prendre en paramètre un idEmploye(int), un nom de jour(varchar(8)), une heure de début (time) et une heure de fin (time). 

    Elle va remplir la table Horaire avec tous les enregistrements nécessaires pour cet employé, ce jour, et toutes les tranches horaires entre l'heure de début et l'heure de fin.

    Voici la portion de code que j'ai développé : 

    BEGIN
    
        SELECT idJour INTO @idJour FROM `jour` WHERE JourSemaine = DayWeek;
        
        SELECT GROUP_CONCAT(idTrancheH) AS result FROM tranchehoraire WHERE TrancheH BETWEEN heureDebut AND heureFin;
      
        loop_label : loop
        
            INSERT INTO `horaire` (`idEmployé`, `idJour`, `idTrancheH`) VALUES
            (idEmployee,@idJour, @idTrancheH);
    
        SET  heureDebut = ADDTIME(heureDebut ,'0:30:00.00');
    
            IF  heureDebut <= TIME(heureFin) THEN 
                ITERATE  loop_label;
            ELSE
                    LEAVE  loop_label;
            END  IF;
            
        END LOOP;
       RETURN heureDebut;
    END



    Je vous remercie

    • Partager sur Facebook
    • Partager sur Twitter
      3 mai 2021 à 9:13:25

      Bonjour,

      Si la requête SELECT peut retourner plusieurs enregistrements, alors il faut travailler avec un curseur.

      https://dev.mysql.com/doc/refman/8.0/en/cursors.html

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        3 mai 2021 à 23:16:45

        Bonjour, 

        En faisant 2 curseurs, j'ai un souci : #1326 - Cursor is not open

        BEGIN
         		DECLARE idTrancheHoraire INT;
                DECLARE idJour INT;
                DECLARE done INT DEFAULT FALSE;
            	DECLARE cur1 CURSOR FOR SELECT idTrancheH FROM tranchehoraire WHERE TrancheH BETWEEN heureDebut AND heureFin;
               	DECLARE cur2 CURSOR FOR SELECT idJour FROM jour WHERE JourSemaine = DayWeek;
               
            	 DECLARE exit HANDLER FOR NOT FOUND
        		
            
          	OPEN cur1;
        	OPEN cur2;
            
        	read_loop : LOOP
        
        	FETCH cur1 INTO idTrancheHoraire;
        	FETCH cur2 INTO idJour;
        
          	IF  heureDebut <= heureFin THEN 
        		
                INSERT INTO `horaire` (`idEmployé`, `idJour`, `idTrancheH`) VALUES
        (idEmployee,idJour, idTrancheHoraire);
                ELSE
                	LEAVE  read_loop;
        		END  IF;
        
          END LOOP;
        		 
           CLOSE cur1;
           CLOSE cur2;
        
        END


        • Partager sur Facebook
        • Partager sur Twitter

        Faire un insert query dans une boucle en mysql

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown