Bonsoir tse_jc,
Merci pour ta requête. Dès que je l'aurai testée, je posterai un message
Bonsoir tse_jc,
Merci pour ta requête. Dès que je l'aurai testée, je posterai un message
Bonsoir Sabotage,
De nouveau merci. J'ai réussi à transposer ton code pour rendre "cliquable" la plupart des caractéristiques de mes livres. Mais je bute sur les liens des fonctions et des contributeurs.
J'ai essayé de faire ce début de 1er code :
Mais je ne sais pas comment récupérer en plus le NOM_FONCTION comme dans le code original :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 while ($data = mysql_fetch_assoc($resultat_contrib)){ $livre_contributeurs[$data['ID_LIVRE']][] = $data ['ID_CONTRIBUTEUR']; if (!isset($tblContributeurs[$data ['ID_CONTRIBUTEUR']])) { $tblContributeurs[$data ['ID_CONTRIBUTEUR']] = $data ['PRENOM_CONTRIBUTEUR'] . " " . $data ['NOM_CONTRIBUTEUR']; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while ($data = mysql_fetch_assoc($resultat_contrib)){ $livre_contributeurs[$data['ID_LIVRE']][$data ['NOM_FONCTION']][] = $data ['PRENOM_CONTRIBUTEUR'] . " " . $data ['NOM_CONTRIBUTEUR']; }
Dans la continuité de mon 1er code, j'ai fait ce code :
Cela m'affiche bien chaque contributeur sous forme de lien mais je n'ai plus le nom de la fonction qui s'affiche et je perds le bénéfice de l'implode qui m'affichait mes contributeurs séparés par des ";".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 foreach ($livre_contributeurs[$data['id_livre']] as $contributeur_id) { echo '<a href="filtres.php?id_categorie='.$contributeur_id.'"><strong>'.$tblContributeurs[$contributeur_id].'</strong></a><br/>'; }
Comment adapter mon code pour pouvoir conserver l'affichage des fonctions et des contributeurs tel qu'il existait avant la mise en place des liens ?
titre1
auteur [=> fonction "cliquable" avec son id_fonction] : auteur1; auteur2; auteur3 => chaque auteur "cliquable" avec son id_contributeur
traducteur [=> fonction "cliquable" avec son id_fonction] : traducteur1; traducteur2 => chaque traducteur "cliquable"avec son id_contributeur
Merci d'avance de toute aide complémentaire
Pour le groupement c'est la meme modification : on indexe avec l'id
Pour l'affichage ca ne marche pas pareil puisqu'il y a le niveau "fonction" en plus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 while ($data = mysql_fetch_assoc($resultat)){ $livre_contributeurs[$data['ID_LIVRE']][$data ['NOM_FONCTION']][$data['ID_CONTRIBUTEUR']] = $data ['PRENOM_CONTRIBUTEUR'] . " " . $data ['NOM_CONTRIBUTEUR']; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 foreach ($livre_contributeurs[$data['id_livre']] as $fonction => $contributeurs) { foreach($contributeurs as $contributeur_id => $contributeur_nom) { echo '<a href="filtres.php?id_contributeur='.$contributeur_id.'"><strong>'.$contributeur_nom.'</strong></a><br/>'; } }
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
Merci Sabotage. En utilisant ton 1er code tel quel et le 2nd de la façon suivante :
J'obtiens l'affichage suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 foreach ($livre_contributeurs[$data['id_livre']] as $fonction => $contributeurs) { foreach($contributeurs as $contributeur_id => $contributeur_nom) { echo $fonction. ' : ' .'<a href="filtres.php?id_contributeur='.$contributeur_id.'"><strong>'.$contributeur_nom.'</strong></a><br/>'; } }
TITRE 1
auteur : Douglas Preston
auteur : Lincoln Child
traducteur : Jean Colonna
traducteur : José Finche
Chaque nom de contributeur est un lien. Mais je souhaiterais aussi que chaque fonction soit également un lien et obtenir un affichage du style (implode ?) :
auteur : Douglas Preston; Lincoln Child
traducteur : Jean Colonna; José Finche
J'utilise la requête suivante :
Je ne suis pas loin d'arriver à l'affichage tant espéré... merci encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $selectcontrib = "SELECT L.ID_LIVRE,CB.NOM_CONTRIBUTEUR, CB.PRENOM_CONTRIBUTEUR, F.NOM_FONCTION, CB.ID_CONTRIBUTEUR, F.ID_FONCTION 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 ";
Mah non :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 foreach ($livre_contributeurs[$data['id_livre']] as $fonction => $contributeurs) { echo $fonction. ' : '; foreach($contributeurs as $contributeur_id => $contributeur_nom) { echo '<a href="filtres.php?id_contributeur='.$contributeur_id.'"><strong>'.$contributeur_nom.'</strong></a>;'; } }
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
Bonjour Sabotage,
L'affichage obtenu grâce à ton précieux code est le suivant :
TITRE 1
auteur1 : John Hart ; Jeff Hoppel; (chaque contributeur est 1 lien)
traducteur : Sabine Boulongne ; Martine trahn; (chaque contributeur est 1 lien)
C'est quasiment l'affichage souhaité...
1) En effet j'ai cherché en vain à faire de chaque fonction 1 lien (fonction "cliquable" avec son id_fonction) Aurais-tu une idée pour y parvenir ?
2) Chaque contributeur est séparé par un ;, ce qui est correct. Mais y-a-t-il un moyen d'éviter l'affichage de ce ; à la fin du dernier contributeur ?
Merci d'avance (encore).
Bonjour tse_jc,
J'ai testé ta requête en rajoutant quelques ")" ou "," manquants. La requête suivante :
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 SELECT titre,sous_titre,isbn,nom_librairie,nom_editeur,t1.genres,t2.contribs,t3.lecteurs,t4.cats FROM livre, librairie, editeur, participe, lit, thematise, classifie3, (SELECT id_genre,GROUP_CONCAT(DISTINCT nom_genre SEPARATOR '; ') as genres FROM genre) as t1, (SELECT contributeurs.id_contributeur,GROUP_CONCAT(DISTINCT nom_contributeur,', ',prenom_contributeur,' : ',nom_fonction SEPARATOR ';') as contribs FROM contributeurs,fonction,participe WHERE participe.id_contributeur=contributeurs.id_contributeur AND participe.id_fonction=fonction.id_fonction) as t2, (SELECT id_lecteur,GROUP_CONCAT(DISTINCT nom_lecteur SEPARATOR'; ') as lecteurs FROM lecteur) as t3, (SELECT id_categorie,GROUP_CONCAT(DISTINCT nom_categorie SEPARATOR '; ') as cats FROM categorie) as t4 WHERE livre.id_librairie=librairie.id_librairie AND livre.id_editeur=editeur.id_editeur AND thematise.id_genre=t1.id_genre AND thematise.id_livre=livre.id_livre AND participe.id_livre=livre.id_livre AND lit.id_lecteur=t3.id_lecteur AND lit.id_livre=livre.id_livre AND classifie3.id_categorie=t4.id_categorie AND classifie3.id_livre=livre.id_livre GROUP BY livre.id_livre
ne donne pas le résultat escompté (voir pièce jointe). Le résultat retourne seulement 242 livres alors que ma base en compte 1490. Par ailleurs, à chaque livre, est associée la liste complète des catégories, genres, lecteurs et contributeurs.
Vois-tu comment modifier la requête pour retourner 1490 résultats avec pour chacun uniquement les catégories, contributeurs ... qui lui correspondent ? Merci d'avance
Tu en veux toujours plus.
On va refaire le meme principe, avec une tableau de correspondance pour les fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 while ($data = mysql_fetch_assoc($resultat)){ $livre_contributeurs[$data['ID_LIVRE']][$data['ID_FONCTION']][$data['ID_CONTRIBUTEUR']] = $data ['PRENOM_CONTRIBUTEUR'] . " " . $data ['NOM_CONTRIBUTEUR']; if (!isset($tblFonctions[$data['ID_FONCTION']])) { $tblFonctions[$data['ID_FONCTION']] = $data['NOM_FONCTION']; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 foreach ($livre_contributeurs[$data['id_livre']] as $fonction_id => $contributeurs) { echo '<a href="filtres.php?id_fonction='.$fonction_id.'"><strong>'.$tblFonctions[$fonction_id].'</strong></a> : '; $echo_contrib = ""; foreach($contributeurs as $contributeur_id => $contributeur_nom) { $echo_contrib .= '<a href="filtres.php?id_contributeur='.$contributeur_id.'"><strong>'.$contributeur_nom.'</strong></a>;'; } // on retire le dernier point-virgule echo substr($echo_contrib, 0 , -1); }
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
Bonjour Sabotage,
Merci beaucoup pour l'ensemble de ton aide Grâce à toi, j'ai obtenu l'affichage souhaité. Je peux attaquer la transmission des données de page en page.
Bonjour.
Alors
1) ma requête ne contenait pas d'erreur de syntaxe (un copier coller sur phpmyadmin ne m'a pas généré d'erreur).
2) Désolé d'avoir sous estimé la requête car la bonne necessitait un peu plus de travail^^. Voici donc la bonne requête et qui fonctionne.
Bonne continuation
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 select livre.titre,livre.sous_titre,livre.isbn,nom_librairie,nom_editeur,t1.genres,t4.lecteurs,t5.cats,t7.participants,thematise.id_livre,lit.id_livre,classifie3.id_livre,participe.id_livre from thematise left join livre on thematise.id_livre=livre.id_livre left join (select t2.id_genre as idg,t2.id_livre, group_concat(distinct nom_genre separator';') as genres from thematise as t2 left join genre on t2.id_genre=genre.id_genre group by t2.id_livre) as t1 on thematise.id_genre=t1.idg, lit left join livre as L2 on lit.id_livre=L2.id_livre left join (select t3.id_lecteur as idlect,t3.id_livre,group_concat(distinct nom_lecteur separator';') as lecteurs from lit as t3 left join lecteur on t3.id_lecteur=lecteur.id_lecteur group by t3.id_livre) as t4 on lit.id_lecteur=t4.idlect, classifie3 left join livre as L3 on classifie3.id_livre=L3.id_livre left join (select t6.id_categorie as idcat,t6.id_livre,group_concat(distinct nom_categorie separator ';') as cats from classifie3 as t6 left join categorie on t6.id_categorie=categorie.id_categorie group by t6.id_livre) as t5 on classifie3.id_categorie=t5.idcat, participe left join livre as L4 on participe.id_livre=L4.id_livre left join (select t8.id_contributeur as idcontrib,t8.id_livre,t8.id_fonction as idfonct, group_concat(distinct nom_contributeur,', ',prenom_contributeur,': ',nom_fonction separator';') as participants from participe as t8 left join contributeurs on t8.id_contributeur=contributeurs.id_contributeur left join fonction on t8.id_fonction=fonction.id_fonction group by t8.id_livre) as t7 on participe.id_contributeur=t7.idcontrib, livre as L5 left join librairie on L5.id_librairie=librairie.id_librairie, livre as L6 left join editeur on L6.id_editeur=editeur.id_editeur where L2.id_livre=livre.id_livre and t4.idlect=lit.id_lecteur and t1.idg=thematise.id_genre and t5.idcat=classifie3.id_categorie and L3.id_livre=livre.id_livre and L4.id_livre=livre.id_livre and t7.idcontrib=participe.id_contributeur and L5.id_livre=livre.id_livre and L6.id_livre=livre.id_livre
PS: Par curiosité si tu peux test la différence de temps de traitement entre les deux méthodes ca m'interesse
_______________________________________
Azure Data Engineer & Azure DBA
Blog TSE sur developpez.com : Architectures web hautes performances en PHP
Les meilleurs tutoriels PHP sur developpez.com
Bonsoir tse_jc,
Merci beaucoup pour ta requête. Je l'ai testée à plusieurs reprises dans PhpMyadmin mais celle-ci n'aboutit pas. Au bout de 60/120 secondes, la page d'accueil de PhpMyadmin s'affiche. Vois-tu une explication ? Merci.
PS : en testant ta 1ere requête, PhpMyadmin m'affichait des erreurs de syntaxe avant que je ne rajoute les , et )...
Bonsoir.
Merci pour ta réponse. Je l'ai testé sur PhpMyAdmin v3.2.2.1 avec le client MySQL v5.1.48 et l'extension PHP mysqli. Je n'ai eu aucun problème. Si tu as les mêmes versions, demande à ton hébergeur.
Note: J'ai fait un copier/coller de phpmyadmin sur le fofo sur une source codée en UTF8. Vérifie aussi à ce niveau là.
_______________________________________
Azure Data Engineer & Azure DBA
Blog TSE sur developpez.com : Architectures web hautes performances en PHP
Les meilleurs tutoriels PHP sur developpez.com
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager