L'extrait de code suivant doit m'afficher l'identité des contributeurs d'un livre et le type de fonction exercée (auteur ou traducteur):
<?php
requête SQL...
$tab_contributeurs = array();
$tab_fonctions = array();
foreach($reponse as $row)
{
$titre = $row['titre'];
(...)
$tab_contributeurs = explode('|', $row['contributeurs']);
$tab_fonctions= explode('|', $row['nom_fonctions']);
// affichage des fonctions : auteur, traducteur
foreach($tab_fonctions as $fonction)
echo $fonction.' : <br/>';
// affichage des contributeurs : identité de l'auteur, traducteur
foreach($tab_contributeurs as $contributeur)
echo $contributeur.'<br/>';
}?>
Me donne l'affichage suivant :traducteur :
auteur :
auteur1
auteur2
traducteur1
traducteur2
alors que je souhaite cet affichage :
auteurs : auteur1, auteur2 (...)
traducteurs : traducteur1, traducteur2 (...)
J'ai fait les var_dump (ex : Pour un livre ayant comme auteurs : E. Winter et Collectif et comme traducteur : Breque) :
- de $tab_fonctions :
array(2) { [0]=> string(6) "auteur" [1]=> string(10) "traducteur" }
- de $tab_contributeurs :
array(3) { [0]=> string(9) "E. Winter" [1]=> string(6) "Breque" [2]=> string(9) "Collectif" }
L'affichage obtenu est : auteur :
traducteur :
E. Winter
Breque
Collectif
Je vous donne la structure des tables concernées :
- 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
et ma requête :
$reponse = $bdd->query('SELECT L.TITRE AS titre, (...)
GROUP_CONCAT(DISTINCT CB.NOM_CONTRIBUTEUR SEPARATOR "|") AS contributeurs,
GROUP_CONCAT(DISTINCT F.NOM_FONCTION SEPARATOR "|") AS nom_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
GROUP BY L.id_livre
ORDER BY L.TITRE
LIMIT 0,100')
Pouvez-vous m'aider à obtenir l'affichage souhaité ? Merci d'avance.
Ce que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.