Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/01/2012, 15h55   #1
Membre du Club
 
Homme
Développeur Web
Inscription : juillet 2009
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juillet 2009
Messages : 54
Points : 27
Points : 27
Par défaut boucle sur requête JOIN et DOUBLONS

Bonjour,

J'ai une base mysql avec deux tables : 'auteurs' et 'livres'. La première contient pour chaque auteur son identifiant, son nom et sa nationalité. La seconde contient pour chaque livre son identifiant, l'identifiant de son auteur, et son titre.

Je veux afficher les noms et nationalités des auteurs dans une liste principale, et sous chaque auteur afficher une sous-liste avec les titres de ses livres.

Je fais donc la requête suivante :

Code :
"SELECT * FROM livres JOIN auteurs ON livres.auteur_id = auteurs.auteur_id"
et je l'affiche ainsi (pour tester) :

Code :
1
2
3
4
5
6
7
while ($row = $req->fetch(PDO::FETCH_OBJ))
{
	foreach($row as $key=> $val)
	{
		echo $key,' => ', $val,'<br />';
	}
}
Comment faire pour que les noms et nationalités des auteurs n'apparaissent qu'une seule fois, et ne soient pas répétés pour chaque livre?

Y a-t-il un moyen de le faire directement dans la requête?


Merci d'avance de votre aide!
gambic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 20h21   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ul>
<?
$auteur = '';
while ($row = $req->fetch(PDO::FETCH_ASSOC))
{
    if($auteur != $row['nom']){ 
		if($auteur != ''){
			echo '</ul></li>';
		}
		echo '<li>'.$row['nom'].' ('.$row['nationalite'].')<ul>';
		$auteur = $row['nom'];
	}
	echo '<li>'.$row['titre'].'</li>';
}
?>
</ul></li></ul>
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 11h27   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 009
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 3 009
Points : 5 068
Points : 5 068
Citation:
Envoyé par gambic Voir le message
Comment faire pour que les noms et nationalités des auteurs n'apparaissent qu'une seule fois, et ne soient pas répétés pour chaque livre?
Y'a pas 36 solutions: soit tu veux tous les noms (et nationalités) d'auteurs ayant publié des livres: à ce moment tu fais un GROUP BY mais tu perds les infos sur les livres.
Soit tu veux la liste des livres avec leurs auteurs à ce moment tu réccupère systématiquement le nom (et la nationalité) avec.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 15h18   #4
Membre du Club
 
Homme
Développeur Web
Inscription : juillet 2009
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juillet 2009
Messages : 54
Points : 27
Points : 27
Par défaut GROUP_CONCAT

Sinon il y a GROUP_CONCAT qui permet de concaténer dans une chaîne tous les livres de chaque auteur.

Mais finalement j'ai opté pour l'astuce php de vorace (j'ai juste remplacé $row['nom'] par $row->nom pour que ça fonctionne).

Merci à tous les deux.
gambic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h38.


 
 
 
 
Partenaires

Hébergement Web