Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2011, 12h22   #1
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 1
Points : 1
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 :

Citation:
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 :
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...
whoaloic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 14h03   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 15h11   #3
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 1
Points : 1
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 :

Citation:
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 :
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 :
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
 
?>
whoaloic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 15h18   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
si tu as PDO, avec FETCH_GROUP ca se fait facilement :
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h25   #5
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 1
Points : 1
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 :
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
 
?>
whoaloic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h06.


 
 
 
 
Partenaires

Hébergement Web