Version complète: sur le forum Webmaster Hub : Faire une boucle dans une requête
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
fingolfin
Bien le bonjour à tous ! smile.gif

Alors voilà, j'ai un petit (gros) problème, il s'avère que j'ai grand besoin de faire une boucle dans une requête pour ne pas avoir à faire l'inverse qui demanderait bien plus de puissance (requête dans une boucle tongue.gif ), le seul problème, vous l'aurez compris, réside dans le faites que je ne connais pas et que je n'arrive pas à trouver la syntaxe de ce genre de requête ... (en l'occurence il s'agit d'une boulce dans une requête de type UPDATE), donc du coup je suis bloqué à attendre bêtement de trouver comment faire cela unsure.gif

Voilà, donc merci d'avance smile.gif
Portekoi
Bonsoir,

Sois plus précis. Que veux tu faire ne suffit pas. Donne nous un cas concret du genre "je voufrais mettre à jour les users de telle date etc...."

Merci


Portekoi
fingolfin
Pas de problème smile.gif

Donc en faites il s'agit de la gestion des autorisations d'accès aux différentes pages , donc j'ai une table nommé "groupe_autorisation" ayant pour le moment cette structure :

CITATION
CREATE TABLE `groupe_autorisation` (
`id` mediumint(9) NOT NULL,
`index_membre` tinyint(4) NOT NULL,
`compte` tinyint(4) NOT NULL,
`index_admin` tinyint(4) NOT NULL,
`non_actif` tinyint(4) NOT NULL,
`gestion_groupe` tinyint(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Donc dans ma page de gestion des groupes, une fois que l'on a décidé quelle est le groupe dont on veut modifier les accès et que l'on a fait les modifications, je voudrais faire une requête de type UPDATE avec une boucle prenant comme argument un tableau dont chaque case a pour valeur un champ de la table "groupe_autorisation" (à part id), le but serait donc de modifier tout les champs dans la boucle. Pour être précis j'ai besoin de cela, car à chaque fois que je rajouterai une page dans le site, il y aura un champ de plus dans la BDD, et si je ne veux pas m'ennuyer à modifier le script à chaque fois il faut que le nombre de champ modifiable soit infini grâce à la boucle.
Portekoi
Tu es en Mysql 4 ou 5 ?
fingolfin
Mysql 5.0, sa change quelque chose au niveau du code ? (n'étant pas d'un bon niveau je ne connais franchement pas les différences entre les deux versions tongue.gif )
fingolfin
Bon, n'arrivant toujours pas à faire une boucle dans une requête j'ai trouvé un autre moyens, faire une requête dynamique généré par PHP, donc si sa intérresse quelqu'un, voici le code en question :

CODE
/* On construit la requête qui aura pour but de mettre à jour les champs de la table */
            $req = 'UPDATE groupe, groupe_autorisation SET groupe.nom = "' . $nom . '", groupe.description = "' . $description . '",';
            
            $i = 0;
            while(!empty($tableau_autorisation[$i]))
            {
                $i_suivant = $i + 1;
                if(empty($tableau_autorisation[$i_suivant]))
                {
                    $req.= ' groupe_autorisation.' . $tableau_autorisation[$i] . ' = "' . $_POST[$tableau_autorisation[$i]] . '"';                                    
                }
                
                else
                {
                    $req.= ' groupe_autorisation.' . $tableau_autorisation[$i] . ' = "' . $_POST[$tableau_autorisation[$i]] . '",';
                }
                
                $i++;
            }
            
            
            $req.= ' WHERE groupe.id = "' . $id_groupe . '" AND groupe_autorisation.id = "' . $id_groupe . '"';
            
            echo $req;
            
            mysql_query($req) or die(mysql_error());


Ce code générant une requête dans ce style :

SQL
UPDATE groupe, groupe_autorisation SET groupe.nom = "admin", groupe.description = "Kawa !!", groupe_autorisation.index_membre = "1", groupe_autorisation.compte = "1", groupe_autorisation.index_admin = "1", groupe_autorisation.non_actif = "1", groupe_autorisation.gestion_groupe = "1" WHERE groupe.id = "1" AND groupe_autorisation.id = "1"


Voilà, par contre si quelqu'un connais la structure d'une boucle SQL je suis toujours preneur smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.