Aller au contenu

Boucle dans une boucle, ou group by, ou.. ?


Sujets conseillés

Posté

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

<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

<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

Posté

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 :

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.

Posté (modifié)

Merci Jeroen de m'avoir expliqué le principe : je viens d'essayer avec quelque chose de ce style et ça marche parfaitement :) !

A+

Modifié par Imp
  • 1 month later...
Posté (modifié)

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 :

<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é ?

Modifié par Imp
Posté

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 :

ORDER BY auteur, date

classera par auteur puis par date

Posté

Merci.. j'ai un peu honte car je ne savais même pas qu'on pouvait ainsi mettre plusieurs paramètres de tri !

Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...