Imp Posté 2 Avril 2006 Posté 2 Avril 2006 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
KaRaK Posté 2 Avril 2006 Posté 2 Avril 2006 Bonjour, Normalement le Group By devrait marcher. Tu peux afficher ta requête stp ?
Compte supprimé Posté 2 Avril 2006 Posté 2 Avril 2006 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.
Imp Posté 2 Avril 2006 Auteur Posté 2 Avril 2006 (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é 2 Avril 2006 par Imp
Imp Posté 23 Mai 2006 Auteur Posté 23 Mai 2006 (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é 23 Mai 2006 par Imp
NorSeb Posté 23 Mai 2006 Posté 23 Mai 2006 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
Imp Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 Merci.. j'ai un peu honte car je ne savais même pas qu'on pouvait ainsi mettre plusieurs paramètres de tri !
Anonymus Posté 25 Mai 2006 Posté 25 Mai 2006 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.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant