IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Construction d'un affichage suite à une requête


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut 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 : 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.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Un truc dans ce style devrait faire ton bonheur (après avoir corrigé les éventuelles erreurs dans ce code non testé)
    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
    foreach($reponse as $row){
     
    $titre = $row['titre'];
    $contributeurs = $row['contributeurs'];
    $fonctions = $row['fonctions'];
     
    // affichage du titre
    echo '<br/><h3>' . "Titre" . '</h3>' . $titre . '<br/>';
    // affichage des fonctions : auteur, traducteur 
    echo '<br/>' . "Fonctions" . $fonctions . '<br/>';
    // affichage des contributeurs : identité de l'auteur, traducteur      
    echo '<br/>' . "Contributeurs" . $contributeurs . '<br/>';
    echo '<br />';
     
    }
    trop tard Sabotage

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Et toi tu bosses jamais alors ?
    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
     
    $current['titre'] = "";
    $current['fonction'] = "";
     
    foreach($reponse as $row){
     
       // détection du passage d'un titre à un autre
       if ($row['titre'] != $current['titre']) {
          echo '<br/><h3>'.$row['titre'];.'</h3><br/>';
          $current['titre'] = $row['titre'];
          $current['fonction'] = '';
       }
     
       // détection du passage d'une fonction à une autre
       if ($row['fonction'] != $current['fonction']) {
          echo "<br/>" . $fonction . ' : ';
       }
       else {
            echo ', ';
       }
       echo $row['contributeurs']; 
    }	
    ?>
    je suis sur que c'est pas ça la question
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Merci pour vos réponses. En testant, il s'avère que c'est sabotage qui répond le mieux à ma problématique

    Avec ce code donc :

    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
    $current['titre'] = "";
    $current['fonction'] = "";
     
     
    foreach($reponse as $row){
     
     $fonctions = $row['fonctions'];
     
       // détection du passage d'un titre à un autre
       if ($row['titre'] != $current['titre']) {
          echo '<br/><h3>'.$row['titre'].'</h3><br/>';
          $current['titre'] = $row['titre'];
          $current['fonction'] = '';
       }
     
       // détection du passage d'une fonction à une autre
       if ($row['fonctions'] != $current['fonction']) {
          echo "<br/>" . $fonctions . ' : ';
       }
       else {
            echo ', ';
       }
       echo $row['contributeurs']; 
    }	
    ?>
    J'obtiens par exemple l'affichage suivant :

    999 - le livre du millénaire des maitres du fantastique

    auteur : Collectif
    auteur : Sarrantonio
    traducteur : Châtelain
    traducteur : Desmond
    traducteur : Doizelet
    traducteur : Leynaud
    traducteur : Malfoy
    traducteur : Peters
    traducteur : Richetin

    Existe-t-il un moyen d'obtenir plutôt :

    999 - le livre du millénaire des maitres du fantastique

    auteur : Collectif; Sarrantonio
    traducteur : Châtelain, Desmond (...)

    Et question subsidiaire : est-il possible de gérer le pluriel des fonctions : auteurs, traducteurs si le livre a plus d'un auteur (ou traducteur) ? Merci d'avance de votre éclairage complémentaire.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai oublié une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     // détection du passage d'une fonction à une autre
       if ($row['fonctions'] != $current['fonction']) {
          echo "<br/>" . $fonctions . ' : ';
          $current['fonction'] = $row['fonctions'];
       }
    Pour les pluriels, tout est possible.
    Comme avec cette méthode, on ne peut pas savoir a l'avance le nombre d'éléments, il faudrait mémoriser les contributeurs a chaque boucle et ne les afficher qu'au changement de film ou de fonction.
    Bref ca allourdit le tout, la ou un simple auteur(s) peut faire l'affaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Merci cela fonctionne

    Mais en voulant ajouter un lien sur le echo $row['contributeurs']; :

    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
    26
    27
    28
    29
    30
    $current['titre'] = "";
    $current['fonction'] = "";
     
     
    foreach($reponse as $row){
     
     $fonctions = $row['fonctions'];
     $contributeurs = $row['contributeurs'];
     $id_contributeurs =$row['id_contributeurs'];
     
       // détection du passage d'un titre à un autre
       if ($row['titre'] != $current['titre']) {
          echo '<br/><h3>'.$row['titre'].'</h3><br/>';
          $current['titre'] = $row['titre'];
          $current['fonction'] = '';
       }
     
       // détection du passage d'une fonction à une autre
       if ($row['fonctions'] != $current['fonction']) {
          echo "<br/>" . $fonctions . ' : ';
          $current['fonction'] = $row['fonctions'];
       }
     
       else {
            echo ', ';
       }
     
       echo '<a href="filtres.php?id_categorie='.$id_contributeurs.'"><strong>'.$row['contributeurs'].'</strong></a><br/>';
    }	
    ?>
    je perd l'affichage correct :

    999 - le livre du millénaire des maitres du fantastique

    auteur : Collectif
    , Sarrantonio

    traducteur : Châtelain
    , Desmond
    , Doizelet
    , Leynaud
    , Malfoy
    , Peters
    , Richetin

    Je suis preneur d'un dernier coup de pouce puis je mettrai le sujet en résolu. Merci d'avance.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as mis un <br/> à la fin de ton lien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Mais oui bien sûr ... Merci beaucoup. Sujet résolu

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Bonjour,

    Je me permets de revenir sur le code fourni par Sabotage qui conduit à un affichage du style :

    999 - le livre du millénaire des maitres du fantastique

    auteur : Collectif; Sarrantonio
    traducteur : Châtelain; Desmond (...)

    Cela fonctionne très bien. Mais j'éprouve des difficultés à compléter le code pour gérer en plus l'affichage des catégories auxquelles appartient chaque titre (romans, recueil de nouvelles, document ...). Pour cela j'ai une table "CATEGORIES" (ID_CATEGORIE, NOM_CATEGORIE) et une table CLASSIFIE3 (ID_LIVRE, ID_CATEGORIE).

    J'utilise ce code :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    $reponse = $bdd->query('SELECT L.TITRE AS titre,
            CB.NOM_CONTRIBUTEUR AS contributeurs,
    	CB.PRENOM_CONTRIBUTEUR AS pre_contributeurs,
    	CB.ID_CONTRIBUTEUR AS id_contributeurs,
            F.NOM_FONCTION AS fonctions,
    	C.NOM_CATEGORIE AS categories
     
    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
     
    	INNER JOIN CLASSIFIE3 A ON A.ID_LIVRE = L.ID_LIVRE
    	INNER JOIN CATEGORIE C ON A.ID_CATEGORIE = C.ID_CATEGORIE
     
     
     
    ORDER BY L.DATE_ACHAT DESC,L.TITRE, F.NOM_FONCTION, CB.NOM_CONTRIBUTEUR
    ')
     
    or die(print_r($bdd->errorInfo()));				
     
    $current['titre'] = "";
    $current['fonction'] = "";
     
     
    foreach($reponse as $row){
     
     
     $fonctions = $row['fonctions'];
     $contributeurs = $row['contributeurs'];
     $pre_contributeurs = $row['pre_contributeurs'];
     $id_contributeurs = $row['id_contributeurs'];
     $categories = $row['categories'];
     
     
       // détection du passage d'un titre à un autre
       if ($row['titre'] != $current['titre']) {
          echo '<br/><h3>'.$row['titre'].'</h3><br/>';
          $current['titre'] = $row['titre'];
          $current['fonction'] = '';
       }
     
       // détection du passage d'une fonction à une autre
       if ($row['fonctions'] != $current['fonction']) {
          echo "<br/>" . $fonctions . '(s) : ';
          $current['fonction'] = $row['fonctions'];
       }
     
       else {
            echo '; ';
       }
     
     
     
       echo $pre_contributeurs.' '; 
     
       echo '<a href="filtres.php?id_contributeur='.$id_contributeurs.'"><strong>'.$row['contributeurs'].'</strong></a>';
     
       echo '<br/>'.$categories;
     
     
    }	
    ?>
    Mais j'obtiens l'affichage suivant :

    999 - le livre du millénaire des maitres du fantastique

    auteur(s) : Collectif
    Recueils nouvelles; Al Sarrantonio
    Recueils nouvelles
    traducteur(s) : Evelyne Châtelain
    Recueils nouvelles; William Olivier Desmond
    Recueils nouvelles; Sylvie Doizelet
    Recueils nouvelles; Maryse Leynaud
    Recueils nouvelles

    Alors que l'affichage souhaité est :

    999 - le livre du millénaire des maitres du fantastique

    auteurs(s) :Collectif; Al Sarrantonio
    traducteurs(s) : Evelyne Châtelain; William Olivier Desmond ...
    Recueil ce nouvelles

    Pouvez-vous m'aider à obtenir cet affichage ?(que je transposerai ensuite pour afficher les genres et lecteurs de mes livres). Merci d'avance

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il est plus facile de l'écrire sous le titre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     // détection du passage d'un titre à un autre
       if ($row['titre'] != $current['titre']) {
          echo '<br/><h3>'.$row['titre'].'</h3><br/>';
          echo $row['categories'] . '<br/>';
          $current['titre'] = $row['titre'];
          $current['fonction'] = '';
       }
    Apres si tu veux mieux maitriser ton affichage, il est plus simple de changer de méthode.
    Celle qu'on t'a proposé la, est la plus simple a écrire mais comme elle est linéaire, elle est limitée par son sens de lecture.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Merci pour la réponse. L'affichage est désormais :

    999 - le livre du millénaire des maitres du fantastique

    Recueils nouvelles

    auteur(s) : Collectif
    Recueils nouvelles; Al Sarrantonio
    Recueils nouvelles
    traducteur(s) : Evelyne Châtelain
    Recueils nouvelles; William Olivier Desmond
    Recueils nouvelles; Sylvie Doizelet

    Ce qui n'est pas encore l'affichage escompté

    Je précise qui je suis débutant... Puis-je avoir une aide complémentaire ?

    Quant à changer de méthode, est-il possible d'avoir plus de précisions ? Merci d'avance.

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu n'as pas retiré ta ligne qui affichait $categories.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Effectivement, je ne l'avais pas retiré. Mais je viens de me rendre compte que pour mes livres appartenant à plusieurs catégories, une seule catégorie est affichée Pardon mais j'ai du mal... Une idée complémentaire ? Merci encore.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu as plusieurs catégories par livre, ta jointure est fausse car cela fait une combinaison par contributeur et par catégorie.

    Tu as besoin d'une requête indépendante pour lister les catégories.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    j'avoue être un peu dépassé... comment intégrer ce que tu me dis dans le code ? Désolé de faire trainer en longueur ce post mais mon niveau en PHP est très bas. Merci encore de ta patience.

    Bonjour

    J'ai beau me creuser la tête, je n'arrive à pas à intégrer dans mon code les remarques de ton dernier message. J'aurais vraiment besoin d'un autre coup de pouce car je suis vraiment bloqué Merci d'avance.

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu as fais tes deux requetes ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Malheureusement je ne sais même pas comment articuler les 2 requêtes ni vraiment écrire la 2eme requête dont tu parles. Je suis un peu démuni.

    EDIT : j'ai essayé ce code mais visiblement je m'y prends mal :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    $reponse = $bdd->query('SELECT L.TITRE AS titre,
            CB.NOM_CONTRIBUTEUR AS contributeurs,
    	CB.PRENOM_CONTRIBUTEUR AS pre_contributeurs,
    	CB.ID_CONTRIBUTEUR AS id_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.DATE_ACHAT DESC,L.TITRE, F.NOM_FONCTION, CB.NOM_CONTRIBUTEUR
    ')
     
    or die(print_r($bdd->errorInfo()));				
     
    $current['titre'] = "";
    $current['fonction'] = "";
     
     
    foreach($reponse as $row){
     
     
     $fonctions = $row['fonctions'];
     $contributeurs = $row['contributeurs'];
     $pre_contributeurs = $row['pre_contributeurs'];
     $id_contributeurs = $row['id_contributeurs'];
     
     
     
       // détection du passage d'un titre à un autre
       if ($row['titre'] != $current['titre']) {
          echo '<br/><h3>'.$row['titre'].'</h3><br/>';
     
          $current['titre'] = $row['titre'];
          $current['fonction'] = '';
       }
     
     
       // détection du passage d'une fonction à une autre
       if ($row['fonctions'] != $current['fonction']) {
          echo "<br/>" . $fonctions . '(s) : ';
          $current['fonction'] = $row['fonctions'];
       }
     
       else {
            echo '; ';
       }
     
     
     
       echo $pre_contributeurs.' '; 
     
       echo '<a href="filtres.php?id_contributeur='.$id_contributeurs.'"><strong>'.$row['contributeurs'].'</strong></a>';
     
      } 
       $reponse2 = $bdd->query('SELECT 
    	CATEGORIE.NOM_CATEGORIE AS categories
     
    FROM CATEGORIE
     
     
    ')
    or die(print_r($bdd->errorInfo()));	
     
    foreach($reponse2 as $row){
     
      $categories = $row['categories'];
     
      echo $row['categories'] . '<br/>';
     
     
     $reponse->closeCursor();
     
     
     
     
    }	
    ?>
    Sur le dernier titre de ma liste, cela m'affiche :

    La chambre jaune

    auteur(s) : Mary Roberts Rinehart
    traducteur(s) : T. Vincelot; S. VincelotRomans
    Recueils nouvelles
    Documents
    Vie pratique
    Ouvrages de référence
    Revues
    Informatique
    Beaux livres
    Bandes dessinées
    Livre-jeu
    Pièce de théatre
    Parascolaire/Universitaire
    Poésie

    Peux-tu m'aider à trouver la solution à mon problème ? Merci.

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il te faut une requete qui liste les categories des livres et une requete qui liste les contributeurs des livres.
    On travaillera sur l'affichage ensuite.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Cette requête liste les catégories des livres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $reponse = $bdd->query('SELECT 
    	CATEGORIE.NOM_CATEGORIE AS categories
     
    FROM CATEGORIE ')
    Celle-ci liste les contributeurs des livres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $reponse2 = $bdd->query('SELECT 
    	CONTRIBUTEURS.NOM_CONTRIBUTEUR AS contributeurs
     
    FROM CONTRIBUTEURS ')
    ... mais je ne suis pas sûr de faire correctement...

  20. #20
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non ce n'est pas ça.
    Il faut recolter avec une jointure comme tu l'as deja fait :

    requete 1 - livre_id, categorie_nom

    requete 2 - livre_id, nom_contributeur, prenom_contributeur, fonction

    Ensuite on va tout ranger dans des tableaux de la forme

    $livre_categorie(livre_id=>array(categories))
    exemple : livre_categorie(1355=>array("Recueils", "Documentaire"))

    $livre_contributeurs(livre_id=>array(contributeurs);
    exemple : livre_contributeur(1355=>array("Mary Roberts", "Rinehart"))

    On pourrait tout mettre dans le meme tableau mais je pense que c'est plus facile a suivre comme ça.

    Une fois que nos données sont ordonnées, on peut les afficher comme on le souhaite.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. affichage d'une requête
    Par poula dans le forum Forms
    Réponses: 2
    Dernier message: 18/12/2006, 14h47
  2. Affichage d'une requête
    Par Sorcier157 dans le forum Zend_Db
    Réponses: 6
    Dernier message: 27/10/2006, 10h30
  3. [MySQL] affichage d'une requête
    Par gailup dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/06/2006, 10h20
  4. [MySQL] Affichage d'une requête
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 31/01/2006, 10h54
  5. Modifier l'affichage d'une requête
    Par seal dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo