IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Imbrication boucles while avec mysql_fetch_row


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Imbrication boucles while avec mysql_fetch_row
    Bonjour à tous,
    je souhaite afficher une liste de partenaires en fonction de leur catégorie.
    Par exemple :

    CATEGORIE A
    Partenaire 1
    Partenaire 5

    CATEGORIE B
    Partenaire 2
    Partenaire 4

    CATEGORIE C
    Partenaire 3

    Mais je n'arrive pas gérer les boucles imbriquées.
    Le problème est que je ne sais pas comment faire pour que ma requête SQL (query2) fonctionne à l'intérieur de la deuxième boucle while.

    Est-ce que quelqu'un peut m'aider ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    <?php
        $serveurBD = "localhost";
        $nomUtilisateur = "myname";
        $motDePasse = "2011";
        $baseDeDonnees = "bd2011";
     
        $connectServeur = mysql_connect($serveurBD, $nomUtilisateur, $motDePasse) 
          or die("Impossible de se connecter au serveur de bases de données.");
       $connectBaseDeDonnees = mysql_select_db($baseDeDonnees)
          or die("Cette base de donnees n'existe pas");
     
      mysql_query("SET NAMES 'utf8'"); // régler caractères utf8
     
     
     
    $query = "SELECT nom_categorie FROM categorie  ORDER BY id_categorie";
     
    $i = 1;
     
    $result = mysql_query($query);
     
    		while($row = mysql_fetch_row($result)) {
    		$nom_categorie = $row[0];
    		echo "<h2> $nom_categorie</h2>";
     
     
    			$query2 = "SELECT id_categorie, nom_partenaire, FROM 
    partenaire WHERE id_categorie = $i ORDER BY nom_partenaire"; // $i = 1 
     
    			$result2 = mysql_query($query2);
    			$j = 0;
     
    				while($row = mysql_fetch_row($result2)){
     
    				$id_categorie = $row[0];
    				$nom_partenaire = $row[1];
     
    				echo "<div class='partenaire'>";
    				echo "<h5>" . $nom_partenaire . "</h5>";
    				echo "</div>"; // fin div 'partenaire'
     
    			$i++; //incrémente la catégorie
    			$j++; //incrémente le partenaire
     
    } //fin while result
    			echo "<div class='nettoyeur'> </div>";	
    		} // fin while result2
    Merci...

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Faire des requêtes imbriquées est plutôt lourd.

    Ce sujet a déjà été traité plusieurs fois sur le forum avec différentes méthodes, tu devrais retrouver ça.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Voici une solution pour afficher des éléments d'une table en fonction d'une clé primaire d'une autre table.
    Je prends l'exemple :

    CATEGORIE 1
    Partenaire 1
    Partenaire 3

    CATEGORIE 2

    CATEGORIE 3
    Partenaire 2
    Partenaire 4
    Le problème que je sais pas encore régler : si une catégorie n'a pas de partenaires affectés, elles restent affichées !


    J'imagine qu'il faut utiliser une requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom_partenaire FROM partenaire WHERE id_categorie =$i
    avec une condition dans une nouvelle boucle ?

    Est-ce que quelqu'un a une solution ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
        $serveurBD = "localhost";
        $nomUtilisateur = "myname";
        $motDePasse = "2011";
        $baseDeDonnees = "bd2011";
     
        $connectServeur = mysql_connect($serveurBD, $nomUtilisateur, $motDePasse) 
          or die("Impossible de se connecter au serveur de bases de données.");
       $connectBaseDeDonnees = mysql_select_db($baseDeDonnees)
          or die("Cette base de donnees n'existe pas");
     
      mysql_query("SET NAMES 'utf8'"); // régler caractères utf8
     
     
    	// Affichage categorie
     
    $query = "SELECT DISTINCT nom_categorie FROM categorie ";
     
    $result = mysql_query($query);
     
    $i = 0; 
     
     
    		while($row = mysql_fetch_row($result)) {  
    		$nom_categorie = $row[0];
    		echo "<h2 class='categorie'>$nom_categorie</h2>";
     
     
    		// Affichage partenaire
    		$query2 = "SELECT id_categorie, nom_partenaire FROM partenaire WHERE id_categorie = $i ORDER BY nom_partenaire";
     
                    $result2 = mysql_query($query2);
     
    		$j = 0; 
     
     
    				while($row = mysql_fetch_row($result2)){
    				$id_categorie = $row[0];
    				$nom_partenaire = $row[1];
     
     
    				echo "<div class='partenaire'>";
     
    				echo "<h5>" . $nom_partenaire . "</h5>";
     
    			        echo "</div>"; // fin div 'partenaire'
     
     
    			++$j; // on incrémente le partenaire à +1
     
    			if($j % 3 == 0) { // Tous les 3 enregistrements, on annule le float
    			echo "<div class='nettoyeur'> </div>";
    			}
     
     
    } //fin while result2
    		$i+=1; // on incrémente la catégorie
    		$i;
    			echo "<div class='nettoyeur'> </div>";	
    		} // fin while result
     
    ?>

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    si tu as PDO, avec FETCH_GROUP ca se fait facilement :

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    J'ai enfin réussi ce que je voulais.
    J'ai utilisé une variable pour stocker le nom de ma catégorie et réutiliser ma variable dans la 2ème requête.
    Ainsi dans une première boucle, j'affiche les catégories dans lesquelles existe au moins 1 partenaire ;
    puis dans une deuxième boucle, j'affiche les partenaires dont le nom_categorie est le même que dans la première boucle.

    Voici le code !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
        $serveurBD = "localhost";
        $nomUtilisateur = "myname";
        $motDePasse = "2011";
        $baseDeDonnees = "bd2011";
     
        $connectServeur = mysql_connect($serveurBD, $nomUtilisateur, $motDePasse) 
          or die("Impossible de se connecter au serveur de bases de données.");
       $connectBaseDeDonnees = mysql_select_db($baseDeDonnees)
          or die("Cette base de donnees n'existe pas");
     
      mysql_query("SET NAMES 'utf8'"); // régler caractères utf8
     
     
    	// Affichage categorie
     
    $query = "SELECT DISTINCT nom_categorie FROM categorie, partenaire WHERE categorie.id_categorie IN (SELECT id_categorie FROM partenaire) ";
     
    $result = mysql_query($query);
     
    $i = 0; 
     
     
    		while($row = mysql_fetch_row($result)) {  
    		$nom_categorie = $row[0];
    		echo "<h2 class='categorie'>$nom_categorie</h2>";
    		$category=addslashes($row[0]); //mettre le nom de catégorie dans une nouvelle variable					
     
    		// Affichage partenaire
    		$query2 = "SELECT categorie.id_categorie, nom_partenaire FROM partenaire, categorie WHERE categorie.id_categorie=partenaire.id_categorie AND nom_categorie='$category' ORDER BY nom_partenaire";
     
                    $result2 = mysql_query($query2);
     
    		$j = 0; 
     
     
    				while($row = mysql_fetch_row($result2)){
    				$id_categorie = $row[0];
    				$nom_partenaire = $row[1];
     
     
    				echo "<div class='partenaire'>";
     
    				echo "<h5>" . $nom_partenaire . "</h5>";
     
    			        echo "</div>"; // fin div 'partenaire'
     
     
    			++$j; // on incrémente le partenaire à +1
     
    			if($j % 3 == 0) { // Tous les 3 enregistrements, on annule le float
    			echo "<div class='nettoyeur'> </div>";
    			}
     
     
    } //fin while result2
    		$i+=1; // on incrémente la catégorie
    		$i;
    			echo "<div class='nettoyeur'> </div>";	
    		} // fin while result
     
    ?>

Discussions similaires

  1. boucle while avec Or qui ne marche pas
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2009, 23h33
  2. [MySQL] Imbrication de WHILE avec conditions
    Par cysedbs dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/01/2009, 15h56
  3. Boucle while avec base de données
    Par bremer dans le forum Langage
    Réponses: 9
    Dernier message: 08/09/2008, 15h59
  4. imbrication boucle while
    Par flora806 dans le forum Langage
    Réponses: 8
    Dernier message: 20/02/2008, 15h07
  5. Boucle while avec action sur table SQL
    Par kamikazbe dans le forum JDBC
    Réponses: 4
    Dernier message: 01/06/2007, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo