Version complète: sur le forum Webmaster Hub : Boucle dans une boucle, ou group by, ou.. ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Imp
Bonjour,
Je cherche à afficher d'une certaine manière une bibliographie à partir d'une table MySQL via PHP.
Là où le problème se pose, c'est que je voudrais regrouper tous les titres du même auteur
C'est à dire avoir
CODE
<dl>
    <dt>Victor HUGO</dt>
 <dd>Titre 1</dd>
 <dd>Titre 2</dd>
    <dt>Auteur suivant</dt>
 <dd>Titre 3</dd>
</dl>

et non pas comme j'ai en ce moment
CODE
<dl>
    <dt>Victor HUGO</dt>
 <dd>Titre 1</dd>
    <dt>Victor HUGO</dt>
 <dd>Titre 2</dd>
    <dt>Auteur suivant</dt>
 <dd>Titre 3</dd>
</dl>

A vrai dire je ne sais pas du tout comment faire. Si j'utilise GROUP BY, le titre 2 n'apparait pas.
J'ai l'impression qu'il faudrait faire un boucle dans dans une boucle, mais là je n'arrive pas à le mettre en place.

Quelqu'un pourrait il me mettre sur la voie ?

Bonne journée
KaRaK
Bonjour,

Normalement le Group By devrait marcher.

Tu peux afficher ta requête stp ?
Compte supprimé
tu ne change rien à ta requête sql, mais dans ta boucle php tu définit un variable $auteur_courant. si l'auteur est différent tu l'affiche :

CODE
echo "<dl>";
 foreach ($tab as $row)
     {
     if ($row[auteur]!=$auteur_courant)
   {
   echo "\n<dt>".$row[auteur]."</dt>";
   $auteur_courant=$row[auteur];
   }
     print"\n\t<dd>".$row[titre]."</dd>";
     }
 echo "</dl>";


un truc comme ça quoi.
Imp
Merci Jeroen de m'avoir expliqué le principe : je viens d'essayer avec quelque chose de ce style et ça marche parfaitement smile.gif !

A+
Imp
Bonjour,

Je remonte un peu ce sujet car je me suis demandé s'il serait possible de faire un double classement :
La bibliographie est classée par nom d'auteur. Mais comment serait-il possible que la liste des livres de chaque auteur soit également classée, par date par exemple.
Il me semble qu'avec ce système ce n'est pas possible
Voilà ce que je voudrais :
CODE
<dl>
<dt>Victor HUGO</dt>
<dd>Livre le plus ancien</dd>
<dd>Livre le plus récent</dd>
<dt>Auteur suivant</dt>
<dd>Titre 3</dd>
</dl>


Faut il que j'oublie cette idée de double classement ou y a-t-il une possibilité ?
NorSeb
Bonjour,

Cela dépend de l'origine des données mais en gros il va falloir les classer "à la source" de sorte que l'affichage ne soit plus qu'une formalité.

Si tu utilise une base de données, tu peux mettre plusieurs paramètres de tri.
Par exemple :
SQL
ORDER BY auteur, date

classera par auteur puis par date
Imp
Merci.. j'ai un peu honte car je ne savais même pas qu'on pouvait ainsi mettre plusieurs paramètres de tri !
Anonymus
Laisser faire mysql pour ce genre de problématique, c'est classer les éléments en C++ au lieu de les classer en php. Autrement dit, ca va (normalement) netttement plus vite. Rares sont les bases de données plus sollicitées que les sites eux memes, et c'est un net avantage de faire une requète un tant soit plus complexe, mais au final un résultat qui s'affichera vraiment plus vite.

Enfin...à mon avis.
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.