Bonjour,

J'ai une base de données avec notamment ces tables :

- 1 table FONCTION comportant comme champs : id_fonction et nom_fonction
- 1 table CONTRIBUTEURS comportant comme champs : id_contributeur, nom_contributeur, prenom_contributeur
- 1 table LIVRE comportant comme champs notamment : id_livre, titre ...
- 1 table PARTICIPE comportant comme champs : id_contributeur, id_fonction et id_livre

Suite au conseil avisé de CinePhil, j'utilise la requête suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
SELECT L.TITRE AS titre,
    CB.NOM_CONTRIBUTEUR AS contributeurs,
    F.NOM_FONCTION AS fonctions
FROM LIVRE L
INNER JOIN PARTICIPE P ON P.ID_LIVRE = L.ID_LIVRE
    INNER JOIN CONTRIBUTEURS CB ON CB.ID_CONTRIBUTEUR = P.ID_CONTRIBUTEUR
    INNER JOIN FONCTION F ON F.ID_FONCTION = P.ID_FONCTION
ORDER BY L.TITRE, F.NOM_FONCTION, CD.NOM_CONTRIBUTEUR
En utilisant le code suivant (personnel) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
foreach($reponse as $row){
 
     $titre = $row['titre'];
	 $contributeurs = $row['contributeurs'];
	 $fonctions = $row['fonctions'];
 
	  // affichage du titre
      echo '<br/><h3>'.$titre.'</h3><br/>';
 
 
	 // affichage des fonctions : auteur, traducteur 
 
     echo $fonctions . ' ';
 
 
      // affichage des contributeurs : identité de l'auteur, traducteur      
 
      echo $contributeurs . ' ';
      echo '<br />';
 
 
} 
 
 
 ?>
L'affichage obtenu est du style :

[TITRE] / [NOM_CONTRIBUTEUR] / [NOM_FONCTION]
'MYSERY' / 'KING' / 'Auteur'
'MYSERY' / 'BACHMAN' / 'Auteur'
'MYSERY' / 'Breque' / 'Traducteur'

Ce n'est pas l'affichage escompté. C'est plutôt :

TITRE : MYSERY
AUTEUR : KING; BACHMAN
TRADUCTEUR : BREQUE

CinePhil m'a déconseillé l'utilisation des GROUP-CONCAT dans ma requête et des explode car très gourmands en ressources...

CinePhil a écrit : Ton programme PHP doit parcourir le tableau et construire l'affichage à chaque changement de fonction pour un même titre et à chaque titre. ..[] La requête sera beaucoup plus rapide à exécuter sans le groupage sur un grand nombre de lignes et PHP est bien outillé pour parcourir les tableaux de résultat et éventuellement concaténer les chaînes de caractères extraites de ce tableau.
Pouvez-vous m'aider à construire l'affichage souhaité conformément aux consignes de CinePhil ? Merci d'avance.