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 :

gestion d'une rupture de données


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 100
    Points : 65
    Points
    65
    Par défaut gestion d'une rupture de données
    bon jour à tous

    Je vous sollicite car je ne suis pas fichu de trouver comment mettre en page le contenu d'une table mysql !

    J'ai demandé de l'aide sur le forum sql qui m'a à juste titre fait remarqué que mon soucis était dans la gestion de la rupture de mes données, d'où mon appel ici.

    J'enregistre en temps réel l'activité sur mon petit site.
    Chaque enregistrement contient donc pseudo, dates, pages vues, etc...
    pseudo 5 - date - pages -.....
    pseudo 3 - date - pages -.....
    pseudo 5 - date - pages -.....
    pseudo 1 - date - pages -.....
    pseudo 4 - date - pages -.....
    pseudo 1 - date - pages -.....
    pseudo 1 - date - pages -.....

    Actuellement, je trie puis liste cette table grâce à un tableau (html).

    Je voudrais effectuer un regroupement par pseudo comme ceci :
    pseudo 5 - nb lignes affichées
    date - pages -.....
    date - pages -.....


    pseudo 1 - nb lignes affichées
    date - pages -.....

    pseudo 4 - nb lignes affichées
    date - pages -.....
    date - pages -.....

    Donc à chaque changement de pseudo, calcul du nb de lignes concernées et réaffichage de la ligne-titre du tableau puis en dessous détails ligne à ligne de chacun des enregistrements relatif à pseudo

    Je tourne lamentablement en rond, j'ai tenté des GROUP BY, des boucles imbriquées avec ou sans requête...

    Je ne vois rien du tout. Quelqu'un peut'il me venir en aide ?

  2. #2
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Salut Grassel.

    Tu veu le faire en pur SQL ??

    Ou tu veu mettre du php ?

    En php ça me parait assez simple.

    Dit nous !
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 100
    Points : 65
    Points
    65
    Par défaut
    simple pour un dieu comme moi, cela m'étonnerait

    A priori, en php si c'est possible moi je ne parviens à rien !

    voici ce que j'ai en ce moment :
    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
    $query = "SELECT * FROM "."jcb_logs"." ORDER BY 'c_pseudo'"; // 
    $resultat = mysql_query($query, $connection) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    ?>
    <body>
    <p>&nbsp;</p>
      <?php
    	   echo
    	   "  <table  border='1'>
    	   <tr>
    	   <th scope='col' width='30'>id</th>
    	   <th scope='col' width='100'>pseudo</th>
    	   <th scope='col' width='100'>Date</th>
    	   </tr>" ;
       while ( $res = mysql_fetch_array( $resultat ) ){	
     
    	   $pseudo = $res['c_pseudo'];
    	   $id = $res['c_id'] ;
    	   $date = $res['c_dtConnect'] ;
     
     
    echo		  "<tr>
    		    <td>$res[c_id]</td>
    		    <td>$res[c_pseudo]</td>
    		    <td>$res[c_dtConnect]</td>
    		  </tr>
    	   </table>";
    	   echo "fin d'ocurence"."<br/>";
     
    }
    qui me donne la pièce jointe ci-dessous

    On voit bien qu'à la fin de l'occurence, le tableau n'est plus alimenté...


    Si tu as une autre idée pour un affichage sous forme de listing

    merci pour ton aide en tout cas
    Images attachées Images attachées  

  4. #4
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Ton code est pamal, mais tu devrais pas fermer le tableau dans la boucle

    Sinon je t'ai fait ça, ça devrais donner quelque chose comme tu attend (je n'ai pas pu le tester, en l'absence de ta base de donnée) :
    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
    <?php
    $query = "SELECT * FROM "."jcb_logs"." ORDER BY 'c_pseudo'"; //
    $resultat = mysql_query($query, $connection) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    ?>
    <body>
    <p>&nbsp;</p>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Date</th>
        </tr>
        <?php
        $pseudo = '';
        while($res = mysql_fetch_assoc($resultat)){
            if($pseudo != $res['c_pseudo']){
                echo('<tr><td colspan="2">'.$res['c_pseudo'].'</td></tr>'."\n");
                $pseudo = $res['c_pseudo'];
            }
            echo('<tr><td>'.$res['c_id'].'</td><td>'.$res['c_dtConnect'].'</td></tr>'."\n");
        }
        ?>
    </table>
    Bonne chance
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 100
    Points : 65
    Points
    65
    Par défaut
    merci pour le code, j'y regarde demain plus attentivement.
    Voici ce que j'ai pondu hier, à parfaire sans doute mais c'est un bon début

    En fait je trouve lourd le principe des boucles imbriquées :
    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
    $connection = connect_stats();// selection de tout classé par ordre inverse
    ?>
    <body>
    <p>&nbsp;</p>
     
    <?php
    $query = "SELECT * FROM "."jcb_logs"." GROUP BY c_pseudo ORDER BY c_pseudo "; // ,c_dtConnect DESC
    $resultat = mysql_query($query, $connection) OR die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    while ($data = mysql_fetch_array( $resultat )) {
      $pseudo = $data['c_pseudo'];
     
      $qry1 = "SELECT * FROM ". "jcb_logs"." WHERE c_pseudo ='$pseudo' ORDER BY c_dtConnect DESC" ;
      $result_qry1 = mysql_query($qry1, $connection) OR die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
     
      $qry2 = "SELECT count(*) AS nb_lignes FROM ". "jcb_logs"." WHERE c_pseudo ='$pseudo'" ;
      $result_qry2 = mysql_query($qry2, $connection) OR die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
      $data_qry2 = mysql_fetch_array( $result_qry2 ) ;
     
      ?>
      <table  border='1'>
        <tr>
            <th scope='col' width='30'>id</th>
            <th scope='col' width='100'>pseudo</th>
            <th scope='col' width='200'>Date</th>
            <th scope="col" width="80">session</th>
            <th scope="col" width="120">Page</th>
            <th scope="col" width="100">ip</th>
            <th scope="col" width="300">client</th>
            <th scope="col" width="250">url</th>
            <th scope="col" width="300">url parent</th>
        </tr>
      <?php
        echo "<br/>"."<br/>"."<b>Abonné : "."<font color='red' >".$pseudo." </font>===> "."</b>" ;
        echo " Nb.de passages : "."<b><font color='green'>".$data_qry2['nb_lignes']."</font></b><br/>";
     
    	while ( $data_qry1 = mysql_fetch_array( $result_qry1 ) ){	
    	   echo
    		"<tr>
    		  <td>$data_qry1[c_id]</td>
    		  <td>$data_qry1[c_pseudo]</td>
    		  <td>$data_qry1[c_dtConnect]</td>
    		  <td>$data_qry1[c_sessid]</td>
    		  <td>$data_qry1[c_pgCode]</td>
    		  <td>$data_qry1[c_ip]</td>
    		  <td>$data_qry1[c_client]</td>
    		  <td>$data_qry1[c_url]</td>
    		  <td>$data_qry1[c_urlParent]</td>
    		</tr>";
    	 }
    }
     ?>
    </table>
    En pièce jointe le résultat

    bon we
    Images attachées Images attachées  

  6. #6
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Mhhh...

    Ma version ne comprend par le compte des messages, mais elle ne fait qu'une seule requête alors que la tienne en fait 1 + 2 par pseudo ce qui risque d'être énorme.

    Je te conseil de faire une boucle avant et de stocker dans un tableau le nombre d'entrées pour chaque pseudo.

    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
        $count = array();
        while($res = mysql_fetch_assoc($resultat)){
            if(!isset($count[$res['c_pseudo']])) $count[$res['c_pseudo]] = 0;
            $count[$res['c_pseudo]]++;
        }
    ?>
    Puis tu modifi ça dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            if($pseudo != $res['c_pseudo']){
                echo('<tr><td colspan="2">'.$res['c_pseudo'].' => '.$count[$res['c_pseudo']].' messages !</td></tr>'."\n");
                $pseudo = $res['c_pseudo'];
            }
    Ce qui donne :
    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
    <?php
    $query = "SELECT * FROM "."jcb_logs"." ORDER BY 'c_pseudo'"; //
    $resultat = mysql_query($query, $connection) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    $count = array();
    while($res = mysql_fetch_assoc($resultat)){
        if(!isset($count[$res['c_pseudo']])) $count[$res['c_pseudo]] = 0;
        $count[$res['c_pseudo]]++;
    }
    ?>
    <body>
    <p>&nbsp;</p>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Date</th>
        </tr>
        <?php
        $pseudo = '';
        while($res = mysql_fetch_assoc($resultat)){
            if($pseudo != $res['c_pseudo']){
                echo('<tr><td colspan="2">'.$res['c_pseudo'].' => '.$count[$res['c_pseudo']].' messages !</td></tr>'."\n");
                $pseudo = $res['c_pseudo'];
            }
            echo('<tr><td>'.$res['c_id'].'</td><td>'.$res['c_dtConnect'].'</td></tr>'."\n");
        }
        ?>
    </table>
    Voila bon WE à toi !
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 100
    Points : 65
    Points
    65
    Par défaut
    merci pour l'aide

    Je suis parvenu à mes fins
    Au plaisir

  8. #8
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Tout le plaisir est pour moi !

    Rajoute donc un [RESOLUT] au titre
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

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

Discussions similaires

  1. Gestion d'une base de données Access en C++
    Par Mastero dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 01/10/2008, 11h23
  2. Réponses: 13
    Dernier message: 01/02/2008, 12h09
  3. gestion d'une base des données
    Par bkhbkh dans le forum JDBC
    Réponses: 1
    Dernier message: 16/06/2007, 19h05
  4. Gestion d'une base de données d'offre de prix
    Par sofianoo dans le forum Delphi
    Réponses: 21
    Dernier message: 24/03/2007, 08h11
  5. [JSP][Servlet][Tomcat][JDBC]Gestion d'une base de donnée.
    Par BakaOnigiri dans le forum Servlets/JSP
    Réponses: 31
    Dernier message: 16/05/2006, 20h51

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