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

Langage PHP Discussion :

Affichage d'une requête


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut Affichage d'une requête
    Bonjour à tous,
    Voilà, je souhaiterai afficher les pages consultées (rubriques) par des membres lors de leur visite ; ceci dans un tableau, qui listerait les pages consultées par membre.
    Pour cela j'ai créé une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $reponse = $bdd->query('SELECT distinct r.nom, r.id, c.contact_nom, c.contact_prenom, c.contact_pseudo, s.date, s.id_rubrique, s.pseudo  FROM statistiques s INNER JOIN rubrique r ON s.id_rubrique = r.id INNER JOIN contacts c ON s.pseudo = c.contact_pseudo HAVING s.date > NOW()-INTERVAL 1 MONTH ORDER BY c.contact_nom ASC');
    $donnees = $reponse->fetch();
    et j'ai créé mon tableau :
    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
     
    <table width="100%">
    <tr id="entete-tableau">
    <td >Nom</td>
    <td>Prénom</td>
    <td>Rubrique</td>
    </tr>
    <?php
    while ($donnees = $reponse->fetch())
    {
     ?>	
    <tr id="tableau">
    <td><?php echo $donnees['contact_nom'] ?></td>
    <td><?php echo $donnees['contact_prenom'] ?></td>
    <td><?php 
    $rubrique .= '<br />';
    $rubrique .= $donnees['nom'];
    echo $rubrique ?></td>
    </tr>
    <?php
    }
     $reponse->closeCursor();
    ?>
    </table>
    Or ceci, me retourne pour chaque membre la même liste à laquelle est ajoutée à chaque fois un nouvel élément.
    Je suis coincé et n'arrive pas à avancer sur ce pb.
    Quelqu'un pourrait-il m'aider ?

  2. #2
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Je ne suis pas bien sûr de ma réponse car je ne suis pas bien sûr de la compréhension du problème mais...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE id_membre = $lid_du_membre

    ???

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Ce n'est pas très clair en effet.
    Le résultat (normal) de la requête retourne autant de lignes que de pages consultées (rubrique), en répétant systématiquement le nom du membre.
    Je souhaiterai regrouper le résultat pour qu'il y ait une ligne par membre, et dans cette ligne, une liste des pages consultées.

  4. #4
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Le plus simple serait je pense de tester l'id utilisateur.

    En algo ça donnerait un truc du genre: (oui, en algo car là j'ai le cerveau en compote :/)

    -> requete
    -> premier enregistrement de la requete
    -> affecte id_membre à $variable_iduser.
    -> on créé une ligne tableau
    -> on met dans une colonne nom/prenom
    -> dans la colonne suivante on met la rubrique.
    -> on passe à l'enregistrement suivant (de la requête)
    -> on teste si l'id_user de l'enregistrement = $variable_iduser
    -> si oui, on ajoute simplement la rubrique dans la colonne
    -> si non, on finit la ligne de l'utilisateur, on en créé une nouvelle, on met nom/prénom dans une colonne et on change $variable_iduser
    -> rebelote
    Est-ce compréhensible?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Merci pour ton aide,
    en fait, je ne vois pas comment insérer cette condition au milieu de la boucle.
    Je vais faire des recherches, si quelqu'un a une idée, merci par avance.

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    ta requete n'est pas correcte si tu cherche a avoir les rubriques ton "from" doit pointer sur ta table rubrique moi je ferai cette requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT r.nom, r.id, c.contact_nom, c.contact_prenom, c.contact_pseudo, s.date, s.id_rubrique, s.pseudo
    FROM rubrique r
    INNER JOIN statistiques s
    ON s.id_rubrique = r.id
    INNER JOIN contacts c
    ON c.contact_pseudo = s.pseudo
    HAVING s.date > NOW()-INTERVAL 1 MONTH
    ORDER BY c.contact_nom ASC'
    attention au JOIN en mysql il peut retourner null dans les champs concernés il faut mettre les conditions absolues (qui retourne pas de valeur null) dans la clause WHERE ci nécessaire
    si DISTINCT ne marche pas comme il faut essai avec GROUP BY sur plusieurs champs

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Bonjour et Merci pour ton aide.
    J'ai modifié la requête, et ai fait plusieurs essais de GROUP BY, mais rien à faire, ma requête retourne autant de lignes que de pages consultées, sans grouper par membre, ce que je voudrais au final.

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    je crois avoir compris tu veux la dernière rubrique pour chaque membre.
    si c'est le cas ca devrai être un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT r.nom, r.id, c.contact_nom, c.contact_prenom, c.contact_pseudo, s.date, s.id_rubrique, s.pseudo
    FROM rubrique r
    INNER JOIN statistiques s
    ON s.id_rubrique = r.id
    INNER JOIN contacts c
    ON c.contact_pseudo = s.pseudo
    HAVING s.date > NOW()-INTERVAL 1 MONTH
    GROUP BY c.contact_pseudo
    ORDER BY c.contact_nom ASC, s.date DESC
    sinon éclairci ton besoin

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Merci encore pour ton aide,
    La requête semble fonctionner très bien.
    Ce qui ne colle pas, c'est l'affichage.
    En fait je voudrais que l'affichage dans mon tableau soit comme cela :
    prenom, nom, . page x
    . page y
    . page z (cad la liste des pages consultées)
    prenom2, nom2, . page k
    . page l
    . page m...
    etc...
    or ce que j'obtiens actuellement c'est
    prenom, nom, . page x
    prenom, nom, . page y
    prenom, nom, . page z
    prenom2, nom2, . page k
    prenom2, nom2, . page l
    prenom2, nom2, . page m...
    etc...

  10. #10
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Et sinon plus simple:

    Faire une requête qui récupère les membres. Un foreach sur les membres et dans celui ci faire une requete qui récupère l'historique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($membres as $unMembre){
      $requete = $db->prepare('REQUETE recupere HISTORIQUE WHERE id_user = ?');
      $requete->execute(array($unMembre['id_user']));
    }
    Et faire pour chaque membre une ligne de tableau

  11. #11
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    essai ceci

    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
    <?php
    /**
     * @filesource Rubrique.php
     * @author helfima
     * @version 1.0
     * Date 19 janv. 2011
     */
     
    // ********************************
    // ici ajoute la connection a la database $bdd
    // ********************************
     
    // requete sql
    $query = 'SELECT r.nom, r.id, c.contact_nom, c.contact_prenom, c.contact_pseudo, s.date, s.id_rubrique, s.pseudo';
    $query.= 'FROM rubrique r';
    $query.= 'INNER JOIN statistiques s';
    $query.= 'ON s.id_rubrique = r.id';
    $query.= 'INNER JOIN contacts c';
    $query.= 'ON c.contact_pseudo = s.pseudo';
    $query.= 'HAVING s.date > NOW()-INTERVAL 1 MONTH';
    $query.= 'GROUP BY c.contact_pseudo';
    $query.= 'ORDER BY c.contact_nom ASC, s.date DESC';
    // execution requete
    $reponse = $bdd->query($query);
    // traitement des données
    $rubriques = array();
    while($row = $reponse->fetch()){
    	// preparation du tableau
    	// regroupe les lignes par pseudo
    	$pseudo = $row['pseudo'];
    	$rubriques[$pseudo]['pages'][] = $row;
    	$rubriques[$pseudo]['contact_prenom'] = $row['contact_prenom'];
    	$rubriques[$pseudo]['contact_nom'] = $row['contact_nom'];
    }
     
    // header du tableau
    $output = '<table width="100%">';
    $output.= '<tr id="entete-tableau">';
    $output.= '<td >Nom</td>';
    $output.= '<td>Prénom</td>';
    $output.= '<td>Rubrique</td>';
    $output.= '</tr>';
     
    foreach ($rubriques as $rubrique) {
    	// construit la liste des rubriques
    	$list='<ul>';
    	for ($i = 0; $i < count($rubrique['pages']); $i++) {
    		$list.='<li>'.$rubrique['pages'][i]['nom'].'</li>';
    	}
    	$list.='</ul>';
    	// contruit la ligne du tableau
    	$output.= '<tr>';
    	$output.= '<td valign="top">'.$rubrique['contact_prenom'].'</td>';
    	$output.= '<td valign="top">'.$rubrique['contact_nom'].'</td>';
    	$output.= '<td>'.$list.'</td>';
    	$output.= '</tr>';
    }
    $output.= '</table>';
     
    echo $output;

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Désolé, j'ai en fait, un pb technique sur le site sur lequel je bosse.
    L'hébergeur a changé, cette nuit, le site de serveur, sans me donner la nouvelle adresse... Donc toutes les modifs que je faisais ne changeaient rien à rien, et j'avais l'impression de tomber dingue !!
    Je ne vais pas pouvoir faire l'essai avant d'avoir cette nouvelle adresse de serveur, et ne pourrai pas vous répondre avant demain je pense.
    Mille mercis pour votre aide, je reviens au plus vite.

  13. #13
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    hum, tu travaille sur le serveur de prod!!!
    en général on utilise un serveur de test pour valider les modifications
    en plus pour les site en php/mysql tu a le choix dans des serveurs clé en main
    comme xampp lamp easyphp etc...

    sans compter la galère pour tester ton code
    modif
    upload
    test

    alors quand local tu supprime le upload d'ou un gain en productivité

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Bonjour à tous,

    Tu as parfaitement raison, pour un gain de productivité, pas terrible ; mais là, je travaille sur la partie admin, qui n'est visible que par une personne, donc sans conséquences s'il y a des bugs, et surtout je voulais avoir accès à la base de données pour mes tests.

    Encore merci mille fois pour ton code. Je pense qu'on y est presque :
    il faut retirer le GROUP BY (qu'il faudrait placer avant le HAVING semble-t-il, sinon fatal error, mais il ne sert à rien apparemment),
    et pour la liste des pages, j'ai une liste de points, ce qui suggèrerait que les éléments sont bien là, mais ne s'affichent pas correctement.

    J'essaie d'analyser ton code (la construction du tableau, méthode que je ne connaissais pas), et j'avoue ne pas savoir quoi changer, ça me parait pourtant cohérent ; si ce n'est cette ligne, que pour l'instant je n'ai pas trop compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rubriques[$pseudo]['pages'][] = $row;
    bon je vais creuser.

  15. #15
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $rubriques[$pseudo]['pages'][] = $row;
    $rubriques[$pseudo]['contact_prenom'] = $row['contact_prenom'];
    $rubriques[$pseudo]['contact_nom'] = $row['contact_nom'];
    pour faire simple $rubriques est un tableau multi-direction
    le premier noeud [$pseudo] c'est pour regrouper les données selon le pseudo
    apres il y a 3 branches
    ['pages'] regroupe les lignes des rubriques correspondant au pseudo
    ['contact_prenom'] le prenom du contact
    ['contact_nom'] le nom du contact

    donc quand on boucle sur le premier noeud on a facilement les 3 données, les 2 noeud ['contact_prenom'] et ['contact_nom'] ne sont pas réellement nécessaire puisque qu'on les retrouvera dans ['pages'][0]['contact_prenom'] et ['pages'][0]['contact_nom'] mais ca simplifie l'exploitation

    pour finir dans $rubriques[$pseudo]['pages'] tu retrouve toute les lignes de la requete correspondant au $pseudo ainsi on ne perd pas de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rubriques[$pseudo]['pages'][] = $row;
    ce code empile chaque ligne $row dans le tableau $rubriques[$pseudo]['pages']

    affiche le tableau résultat tu comprendra mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<pre>'.print_r($rubriques, true).'</pre>';
    sinon l'erreur du code doit être la case ['nom'] qui est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $list.='<li>'.$rubrique['pages'][i]['nom'].'</li>';

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup pour les explications, je comprends mieux.

    Lorsque je fais le print_r, tous les éléments s'affichent bien.

    En revanche, dans l'affichage de mon tableau, je n'ai que les puces et pas les noms des fameuses pages consultées.

  17. #17
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    copie/colle le print de ton tableau $rubriques que je vois ce qu'il y a dedans

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Bonjour à tous,
    Ci-dessous le print_r (un extrait : 1er contact, 2 pages visitées) :
    Code php : 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
    Array
    (
        [leNomDuContact] => Array
            (
                [pages] => Array
                    (
                        [0] => Array
                            (
                                [nom] => leNomDeLaPageVisitee
                                [0] => leNomDeLaPageVisitee
                                [id] => 11
                                [1] => 11
                                [contact_nom] => leNomDuContact
                                [2] => leNomDuContact
                                [contact_prenom] => lePrenomDuContact
                                [3] => lePrenomDuContact
                                [contact_pseudo] => lePseudoDuContact
                                [4] => lePseudoDuContact
                                [date] => 2011-01-18
                                [5] => 2011-01-18
                                [id_rubrique] => 11
                                [6] => 11
                                [pseudo] => lePseudoDuContact
                                [7] => lePseudoDuContact
                            )
     
                        [1] => Array
                            (
                                [nom] => leNomDeLaPageVisitee
                                [0] => leNomDeLaPageVisitee
                                [id] => 11
                                [1] => 11
                                [contact_nom] => leNomDuContact
                                [2] => leNomDuContact
                                [contact_prenom] => lePrenomDuContact
                                [3] => lePrenomDuContact
                                [contact_pseudo] => lePseudoDuContact
                                [4] => lePseudoDuContact
                                [date] => 2011-01-18
                                [5] => 2011-01-18
                                [id_rubrique] => 11
                                [6] => 11
                                [pseudo] => lePseudoDuContact
                                [7] => lePseudoDuContact
                            )
     
                    )
     
                [contact_prenom] => lePrenomDuContact
                [contact_nom] => leNomDuContact
            )

  19. #19
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    j'avais dit que l'erreur venait de cette ligne, j'avais oublié le $ devant le i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $list.='<li>'.$rubrique['pages'][$i]['nom'].'</li>';

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    C'est trop génial
    je n'aurais jamais pensé à mettre un $ devant le i, pourtant je tournais le pb dans tous les sens...
    Merci mille fois ! et j'ai appris plusieurs trucs !
    Très bon week end !

+ Répondre à la discussion
Cette discussion est résolue.

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