Construction d'un affichage suite à une requête
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:
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:
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...
Citation:
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.