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 SQL Discussion :

requête pour grouper des enregistrements


Sujet :

Langage SQL

  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 requête pour grouper des enregistrements
    bon soir à tous

    Voilà mon énorme soucis : j'archive en temps réel dans une table chaque connexion à 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
    date - pages -.....
    date - pages -.....

    pseudo 1
    date - pages -.....

    pseudo 4
    date - pages -.....
    date - pages -.....

    Je voudrais éviter la création d'une table par pseudo
    Je me perd en requète multiple, sous-requête et autre délicatesse
    Quelqu'un peut-il me mettre sur la voie ? svp

    bonne ap'
    pascal

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    La voie est le GROUP BY

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  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
    c'est la première voie que j'ai cherchée ....
    un autre indice

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Que voulez vous faire exactement ?
    Donnez un exemple, un DDL de vos tables et un jeu d'essai pour que l'on puisse comprendre le but de votre demande.

    Je me demande en effet si votre probleme est l'extraction de données de la base (SQL) ou la mise en forme de ces données extraites (client tiers).

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  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 cette aide matinale, je suis totalement autodidacte, pardon donc pour mes incompréhensions : DDL ?

    Comment préciser : en pièce jointe "order1", tableau obtenu grâce à la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM "."jcb_logs"." ORDER BY c_pseudo"
    En pièc joint "groupby2" le tableau obtenu par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM "."jcb_logs"." GROUP BY c_pseudo ORDER BY c_pseudo"
    En fait, je voudrais obtenir le tableau de la pièce jointe n°1 avec reprise de la ligne entête du tableau à chaque changement de pseudo

    voici le code de ma page:
    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
    // récup des éléments ds bdd
    include('../logon/fonctions.inc.php');
    $connection = connect_stats();// selection de tout classé par ordre inverse
    $query = "SELECT * FROM "."jcb_logs"." GROUP BY c_pseudo ORDER BY c_pseudo"; // 
    $resultat = mysql_query($query, $connection) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    ?>
     
    <body>
     
    <p>&nbsp;</p>
      <?php
      while ( $nb_enregis = mysql_fetch_array( $resultat ) ){	
      ?>
      <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>
        <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">navigateur</th>-->
        <th scope="col" width="250">url</th>
        <th scope="col" width="300">url parent</th>
      </tr>
    <?php
    //  while ( $nb_enregis = mysql_fetch_array( $resultat ) ){	
    	$sessid = substr($nb_enregis['c_sessid'],-10);
    	$pgCode = stripslashes ($nb_enregis['c_pgCode']);
    	$client = stripslashes (substr($nb_enregis['c_client'],0, 50));
    //	$nav = stripslashes (substr($nb_enregis['c_nav'],0, 90));
    	$url = stripslashes (substr($nb_enregis['c_url'],-40));
    	//$url = $nb_enregis['c_url'];
    	//$url = stripslashes ($nb_enregis['c_url']);
    	$urlParent = stripslashes (substr($nb_enregis['c_urlParent'],-40));
    	$urlParent = stripslashes ($nb_enregis['c_urlParent']);
    echo  
    		"<tr>
    		  <td>$nb_enregis[c_id]</td>
    		  <td>$nb_enregis[c_pseudo]</td>
    		  <td>$nb_enregis[c_dtConnect]</td>
    		  <td>$sessid</td>
    		  <td>$pgCode</td>
    		  <td>$nb_enregis[c_ip]</td>
    		  <td>$client</td>
    		  <!--<td>$nav</td>-->
    		  <td>$url</td>
    		  <td>$urlParent</td>
    		</tr>";
    	}
      ?>
    </table>
    J'espère que ceci est plus clair pour vous
    Images attachées Images attachées   

  6. #6
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    je confime donc que votre probleme n'est pas SQL.
    Vous devez gerer les ruptures de données (cad lorsque qu'une donnée de votre choix change, votre programme doit faire une action différente).

    Une solution consiste a selectionner vos lignes, par ordre de pseudo puis :


    ALGO simplifié (pour vous donner une voie) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    memo_pseudo=""  /* histoire d'initialiser */
    Tant que pas erreur SQL 
       Fetcher vos informations dans les variables
       si pseudo <> memo_pseudo /* rupture */
              Gerer votre entete de tableau
      fin si
      afficher les infos
      memo_pseudo=pseudo
    fintanque
    Mais cela n'a pas grand chose a voir avec SQL

    bon courage ...
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  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
    oui, je m'en suis rendu compte en écrivant mon dernier message.

    Merci en tout cas pour les encouragements

  8. #8
    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
    Grâce à vos remarques voilà le code que je suis parvenu à écrire

    Je reste à l'écoute de vos critiques éventuelles :
    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_id]</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ècce jointe le résultat obtenu

    Merci encore
    pascal
    Images attachées Images attachées  

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je ne suis pas calé en php, mais j'ai l'impression que vos concaténations dans vos $query sont inutiles, la requête suivante suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $qry1 = "SELECT * FROM jcb_logs WHERE c_pseudo ='$pseudo' ORDER BY c_dtConnect DESC"
    Si le langage le justifie ne tenez pas compte de cette intervention.

  10. #10
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Pensez au tag "Résolu", cela permet de clarifier le forum
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  11. #11
    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
    effectivement la concaténation se justifie essentiellement parce que je passerai le nom de la table par une constante

    merci à tous

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

Discussions similaires

  1. Requête pour grouper des données
    Par panpelope dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/04/2013, 12h03
  2. Réponses: 3
    Dernier message: 07/10/2008, 11h23
  3. Réponses: 7
    Dernier message: 22/08/2007, 11h49
  4. Réponses: 2
    Dernier message: 09/11/2006, 07h37
  5. boucle pour insérer des enregistrements
    Par roots_man dans le forum ASP
    Réponses: 7
    Dernier message: 05/10/2004, 09h28

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