par
Ryle » 24 avr. 2007, 10:00
Tu pourrais tout à fait mettre une boucle à l'intérieur d'une autre, mais ce n'est pas ce qu'il y a de plus optimisé dans ton cas. Voici toutefois un exemple :
// on liste les sous rubriques d'une rubrique donnée
$sqlSousRub = "SELECT liste des sous rubrique WHERE idMégaRubrique = xx";
$rsSousRub = mysql_query(...);
while (... mysql_fetch_assoc($rsSousRub)) { // on parcoure les sous rubriques
echo '...'; // affiche le titre de la sous rubrique
// on liste les items de la sous rubrique
$sqlItem = "SELECT liste des élément WHERE idSousRubrique = " . $idSousRubrique;
$rsItem = mysql_query(...);
while (... mysql_fetch_assoc($rsItem)) {
echo '...'; // affiche le titre de l'item
}
}
Bon, ça c'était juste pour montrer qu'il est tout à fait possible de faire des boucles dans des boucles, mais le problème c'est que cela va générer un nombre important de requête (d'autant plus qu'il y aura de rubriques) et le pire c'est que c'est un nombre que tu ne maitrises pas...
Le mieux selon moi dans ce cas, c'est de ne faire qu'une seule requête et de traiter l'affichage avec php :
// je ramene toutes les sous rubriques et éléments, en les triant
$sql = "SELECT sous_rubrique, item FROM .... ORDER BY sous_rubrique, item";
$rs = mysql_query($sql);
$tmpSousRubrique = ""; // je crée une variable temporaire qui contiendra le nom de ma sous rubrique (vide pas défaut)
while (...) {
if ($tmpSousRubrique != $row['sous_rubrique']) { // si le nom de la rubrique est différent de celui dans la tmp
echo '...'; // j'affiche le nom de la rubrique
$tmpSousRubrique != $row['sous_rubrique']; // je stocke le nom de la nouvelle rubrique.
}
echo '...'; // affichage de l'item
}
Ainsi tu affiches tous les item, mais tu n'affiches le titre de la rubrique que lorsqu'il est différent

Tu pourrais tout à fait mettre une boucle à l'intérieur d'une autre, mais ce n'est pas ce qu'il y a de plus optimisé dans ton cas. Voici toutefois un exemple :
[php]// on liste les sous rubriques d'une rubrique donnée
$sqlSousRub = "SELECT liste des sous rubrique WHERE idMégaRubrique = xx";
$rsSousRub = mysql_query(...);
while (... mysql_fetch_assoc($rsSousRub)) { // on parcoure les sous rubriques
echo '...'; // affiche le titre de la sous rubrique
// on liste les items de la sous rubrique
$sqlItem = "SELECT liste des élément WHERE idSousRubrique = " . $idSousRubrique;
$rsItem = mysql_query(...);
while (... mysql_fetch_assoc($rsItem)) {
echo '...'; // affiche le titre de l'item
}
}[/php]
Bon, ça c'était juste pour montrer qu'il est tout à fait possible de faire des boucles dans des boucles, mais le problème c'est que cela va générer un nombre important de requête (d'autant plus qu'il y aura de rubriques) et le pire c'est que c'est un nombre que tu ne maitrises pas... :)
Le mieux selon moi dans ce cas, c'est de ne faire qu'une seule requête et de traiter l'affichage avec php :
[php]// je ramene toutes les sous rubriques et éléments, en les triant
$sql = "SELECT sous_rubrique, item FROM .... ORDER BY sous_rubrique, item";
$rs = mysql_query($sql);
$tmpSousRubrique = ""; // je crée une variable temporaire qui contiendra le nom de ma sous rubrique (vide pas défaut)
while (...) {
if ($tmpSousRubrique != $row['sous_rubrique']) { // si le nom de la rubrique est différent de celui dans la tmp
echo '...'; // j'affiche le nom de la rubrique
$tmpSousRubrique != $row['sous_rubrique']; // je stocke le nom de la nouvelle rubrique.
}
echo '...'; // affichage de l'item
}[/php]
Ainsi tu affiches tous les item, mais tu n'affiches le titre de la rubrique que lorsqu'il est différent :)