8721 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai la requête suivante:
SELECT cours.oeuvre, coursprog.numprog FROM cours, coursprog WHERE coursprog.coursID=cours.id GROUP BY coursprog.numprog, cours.oeuvre


qui donne le résultat souhaité.

oeuvre1 1
oeuvre2 1
oeuvre3 1
oeuvre4 2
oeuvre5 2
oeuvre6 2
etc.

Ce que je voudrais pour l'affichage c'est avoir:

programme 1
oeuvre1
oeuvre2
oeuvre3

programme2
oeuvre4
oeuvre5
oeuvre6

etc.

Sachant qu'il n'y a pas toujours le même nombre d'oeuvres dans chaque programme...

Je ne sais absolument pas comment faire pour obtenir cela.
Merci de votre aide.
Modifié par whynote (05 Oct 2013 - 11:31)
Bonjour,

Quand tu fais ta boucle sur ta requête, fait une vérification sur l'id de ton programme. Si celui-ci a changé affiche le titre.
Mais je penses qu'il faut que tu fasse un ORDER dans ta requête sur Programme + sur oeuvre
Merci pour ta réponse.
C'est une bonne idée en effet. Mais peux-tu m'indiquer quelle est la syntaxe de la condition "si l'id du programme a changé" ?
Pour la boucle je fais:
<?php do { ?>.... <?php } while ($row_rsCours = mysql_fetch_assoc($rsCours)); ?>

Ou faut-il un For ?
C'est pourtant pas très compliqué avec une bonne logique.

$programme = null;
while ($datas = mysql...) {
    if (empty($programme) or $datas['programme_id'] == $programme) {
        echo '<h1>'.$datas['programme_titre'].'</h1>';
        $programme = $datas['programme_id'];
    }
    echo $datas['oeuvre'];
}
Bon finalement, j'ai trouvé une solution (un cache misère !). J'ai rajouté un champs qui me permet de classer l'ordre des oeuvres. Lorsque ce champs = 1 j'affiche le champs titre du programme...
Ca ne me fait pas avancer dans mon apprentissage du php mais ça résout mon problème.

Merci de ton aide.
Modifié par whynote (05 Oct 2013 - 19:39)
Pourquoi tu ne nous montre pas ton code php ? Cela permettrait de voir ce qui ne vas pas.
Pas la peine de mettre toute la page. Met juste le code concernée.

Ta solution est en effet pas terrible. Si tu dois rajouter une œuvre cela risque de ne pas marcher.
Le principe est simple :

- tu poses un drapeau "prog", que tu initialises à null. Il servira à identifier le dernier programme utilisé
- tu fais ta boucles sur les résultats.
- si le drapeau est null (donc premier enregistrement) OU si le drapeau est différent du programme actuel, alors tu affiches le titre du programme
- tu affiches l'oeuvre en cours.

Ce qui se traduit par (exemple tiré d'un de mes sites) :

$cat=null; //Pose un drapeau
while($data=mysqli_fetch_assoc($ressource)) //boucle sur les résultats
{
     if(empty($cat)||$cat!=$data['Categorie']) //si vide ou différent de celui en cours
     { 
               if(!empty($cat)){echo "</ul>";}
               echo "<h2>",$data['Nom_cat']."</h2><ul>"; //affiche
               $prog=$data['Categorie']; //new "en cours"
      }
      echo "<li>".$data['Nom_objet']."</li>"; //la liste
}
echo "</ul>"


En supposant que tes résultats ressemblent à ça :

Nom des champs :
Categorie | Nom_cat | Nom_objet
1 | "Arme SA" | "Poignard"
1 | "Arme SA" | "Dague"
1 | "Arme SA" | "Griffes"
2 | "Arme AA" | "Épée"
2 | "Arme AA" | "Lance"
2 | "Arme AA" | "Masse d'arme"
2 | "Arme AA" | "Hallebarde"
3 | "Arme AJ" | "Arc"
3 | "Arme AJ" | "Arbalète"
3 | "Arme AJ" | "Shuriken"
3 | "Arme AJ" | "Fléchettes"


Et tu vas avoir en html :

<h2>Arme SA</h2>
<ul>
    <li>Poignard</li>
    <li>Dague</li>
    <li>Griffes</li>
</ul>
<h2>Arme AA</h2>
<ul>
    <li>Épée</li>
    <li>Lance</li>
    <li>Masse d'arme</li>
    <li>Hallebarde</li>
</ul>
<h2>Arme AJ</h2>
<ul>
    <li>Arc</li>
    <li>Arbalète</li>
    <li>Shuriken</li>
    <li>Fléchettes</li>
</ul>



(à toi d'adapter, autant la requête que le nom des variables dans le code^^)