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

Requêtes MySQL Discussion :

Formulation d'une requête mysql avec max & group by


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut Formulation d'une requête mysql avec max & group by
    Mysql 5.0.51a ( sur serveur debian lenny)

    Je souhaite créer une requête mysql qui permet d'afficher les résultats dans un tableau html. Dans le tableau doivent s'afficher uniquement les dernières dates , les plus récentes, des visites des conseillers.

    Pour créer mon programme de test je me suis fortement inspire par le programme php sur la page http://www.roseindia.net/sql/mysql-e...group-by.shtml

    J'ai donc crée ma version du programme php:
    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
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <?php
     
    $host = "localhost";
    $user = "xxxx";
    $password = "xxxx";
    $database = "xxxxx";
     
    $connection = mysql_connect($host,$user,$password) 
    	or die("Could not connect: ".mysql_error());
     
    mysql_select_db($database,$connection) 
    	or die("Error in selecting the database:".mysql_error());
     
     
     
    $sql="select id, code_bp_ag, conseiller_cp, max(date), conseiller_bp from animations group by code_bp_ag";
     
     
    $sql_result=mysql_query($sql,$connection) 
    	or exit("Sql Error".mysql_error());
     
    $sql_num=mysql_num_rows($sql_result);
     
    //table header
    echo "<table bgcolor=\"#F5F5FF\"  border=\"1\">"."\n";
    echo "<tr>"."\n";
    echo "<td><b>id</b></td>" ."\n";
    echo "<td><b>code_bp_ag</b></td>" ."\n";
    echo "<td><b>conseiller_cp</b></td>"."\n";
    echo "<td><b>date_derniere_visite</b></td>"."\n";
    echo "<td><b>conseiller_bp</b></td>"."\n";
    echo "</tr>"."\n";
     
    while($sql_row=mysql_fetch_array($sql_result))
    {
    	$id=$sql_row["id"];
    	$code_bp_ag=$sql_row["code_bp_ag"];
    	$conseiller_cp=$sql_row["conseiller_cp"];
    	$date_derniere_visite=$sql_row["max(date)"];
    	$conseiller_bp=$sql_row["conseiller_bp"];
     
      //display sql result data
    	echo "<tr>"."\n";
            echo "<td>".$id."</td>"."\n";
    	echo "<td>".$code_bp_ag."</td>"."\n";
    	echo "<td>".$conseiller_cp."</td>"."\n";
    	echo "<td>".$date_derniere_visite."</td>"."\n";
            echo "<td>".$conseiller_bp."</td>"."\n";
            echo "</tr>"."\n";
    }	
    echo "</table>"
    ?>
    </body>
    </html>

    voici les données pour le test de ma base de données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id 	conseiller_cp 	date 	            code_bp_ag  conseiller_bp
    1 	Magali 	        2010-09-02 11:38:28 	91 	Dupont
    2 	Julie 	        2010-09-23 11:31:44 	91 	Dupont
    3 	Didier 	        2010-09-23 11:32:07 	91 	Dupont
    puis quand j'exécute le script php je reçois le résultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    id 	code_bp_ag 	conseiller_cp 	date_derniere_visite 	conseiller_bp
    1 	91 	        Magali 	         2010-09-23 11:32:07 	Dupont
    Hors ce ne pas le résultat que j'espère. Je m'attendait plutôt à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    id 	code_bp_ag 	conseiller_cp 	date_derniere_visite 	conseiller_bp
    3 	91 	        Didier 	         2010-09-23 11:32:07 	Dupont
    Le groupement se fait par le code d'agence, code_bp_ag.
    Le type de la date dans MySQL est du timestamp

    Quelqu'un à une idée ou est l'erreur?

    Merci d'avance pour votre aide.

    Ps: J'ai hésité de poster mon message ici ... mais bon je pense qu'il s'agit avant tout d'un problème MySQL ... et pas de php ... sauf erreur de ma part???

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    J'ai effectivement reformule ma requête comme suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql ="SELECT id, code_bp_ag, conseiller_cp, date, conseiller_bp
    FROM   animations  
    WHERE  (date=(SELECT MAX(date) FROM animations)) ";
    et j'obtiens le résultat espéré .... enfin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    id 	code_bp_ag 	conseiller_cp 	date_derniere_visite 	conseiller_bp
    3 	91 	        Didier 	         2010-09-23 11:32:07 	Dupont
    mais il manque le group by

  3. #3
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,

    Essayez ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select id, code_bp_ag, conseiller_cp, date, conseiller_bp
    from animations
    where (date, code_bp_ag) IN (
      select max(date), code_bp_ag 
      from animations
      group by code_bp_ag
    )
    ou cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select id, code_bp_ag, conseiller_cp, date, conseiller_bp
    from animations
      join (
        select max(date) AS date, code_bp_ag 
        from animations
        group by code_bp_ag
      ) AS td
        USING (date)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Salut Oishiiii,

    Merci pour ton aide ... ultra rapide.

    J'essaierai cela dans la soirée .... et je te tiens informé

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Oishiiii,

    Super, ton code marche à la perfection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id, code_bp_ag, conseiller_cp, date, conseiller_bp
    FROM animations
    WHERE (date, code_bp_ag) IN (
      SELECT max(date), code_bp_ag 
      FROM animations
      GROUP BY code_bp_ag
    )
    En utilisant cette requête il faut pas oublier de changer la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date_derniere_visite=$sql_row["max(date)"];
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date_derniere_visite=$sql_row["date"];

    Encore MERCI

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

Discussions similaires

  1. unexpected character : erreur à l'exécution d'une requête MySQL avec PHP
    Par sub_zero dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 02/02/2015, 18h22
  2. Réponses: 2
    Dernier message: 17/03/2014, 11h18
  3. Réponses: 1
    Dernier message: 04/02/2011, 09h18
  4. [MySQL] Mettre des conditions dans une requête mysql avec pdo
    Par shima5 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/10/2010, 21h11
  5. Probleme avec une requête MySQL
    Par Alexlesilex dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/05/2006, 17h48

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