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 :

Requete select avec MAX d'une colonne.


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut Requete select avec MAX d'une colonne.
    Bonjour,
    j'ai besoin d'aide pour une requête qui doit selectionner les enregistrements qui possèdent la valeur MAX d'un champ précis...
    Voici les enregistrements de ma table (2tables en fait, mais je simplifie):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Id            Edition               Titre
    1             2009                 Expo de paris
    2             2008                 Expo de paris
    3             2007                 Expo de paris
    4             2006                 Expo de paris
    5             2008                 Expo de berlin
    6             2007                 Expo de berlin
    7             2006                 Expo de berlin
    et voici ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $req_sql = "SELECT DISTINCT " . $this->nom_table . ".id, wb_exposition_langue.titre FROM " . $this->nom_table ;
    $req_sql .= " LEFT JOIN wb_exposition_langue ON " . $this->nom_table . ".id = wb_exposition_langue.id_exposition" ;
    $req_sql .= " LEFT JOIN wb_langue ON wb_exposition_langue.langue = wb_langue.code_iso" ;
    $req_sql .= " WHERE wb_langue.default_langue = 'Y'" ;
    $req_sql .= " AND " . $this->nom_table . ".actif = 'Y'" ;
    $req_sql .= " AND wb_exposition_langue.titre != '".$titre."'" ;
    $req_sql .= " AND edition=(SELECT MAX(edition) FROM wb_exposition)" ;
    (où this.nom_table = wb_exposition et $titre est 1 paramètre que je passe car je veux selectionner les enregistrements dont le titre est différent de celui affiché dans ma page au moment de la requête)
    Et ce que je veux donc, c'est selectionner les enregistrement où le titre est différent de celui passée en param. et dont la valeur Edition est la MAX parmi chaque titre...
    Bon, ça doit paraitre un peu brumeux comme explication je pense...
    Donc pour être + clair :
    Si je passe 'Expo de paris' en paramètre, il doit me retourner l'enregistrement dont l'id=5 (car 'Expo de berlin' != 'Expo de paris' et 2008 = MAX 'Edition' pour ce titre)
    Et si par exemple j'avais ces enregistrements en + dans ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Id            Edition               Titre
    8             2004                 Expo de pekin
    9             2003                 Expo de pekin
    10            2002                 Expo de pekin
    il devrait me retourner les deux enregistrements suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Id            Edition               Titre
    5             2008                 Expo de berlin
    8             2004                 Expo de pekin
    Mais il ne me retourne rien car il prend en compte le MAX du champ 'Edition' que d'une manière générale, et non pas pour chaque titre sélectionné...
    Je sais que le bug vient de la dernière ligne, mais je ne sais pas comment lui dire de selectionner l'enregistrement où se trouve le MAX du champ 'Edition' pour chaque titre...
    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En reprenant seulement ton jeu de données exemple :
    Id Edition Titre
    1 2009 Expo de paris
    2 2008 Expo de paris
    3 2007 Expo de paris
    4 2006 Expo de paris
    5 2008 Expo de berlin
    6 2007 Expo de berlin
    7 2006 Expo de berlin
    Si tu cherches l'Edition max pour chaque Titre différent, il faut faire un regroupement sur le titre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Id, MAX(Edition) AS DerniereEdition, Titre
    FROM TaTable
    GROUP BY Titre
    Après tu utilises ce principe dans ta requête complexe avec les joitures.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Merci CinePhil.
    Il me selectionne bien le MAX 'Edition', mais il ya un petit problème...
    Il ne me selectionne pas l'enregistrement qui correspond au champ où 'Edition' est MAX...
    Par exemple :
    Pièce jointe 34343
    en fait, pour le 2eme enreg. j'ai bien 2009 pour 'Edition', mais ce sont les dates de l'enregistrement de 2008
    (j'avais pas mis tous les champs avant pour simplifier)
    Et je voudrais qu'il selectionne l'enregistrement où se trouve MAX(edition)...
    Voici ma requete modifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $req_sql = "SELECT DISTINCT " . $this->nom_table . ".id, wb_exposition_langue.titre, MAX(wb_exposition.edition) FROM " . $this->nom_table ;
    $req_sql .= " LEFT JOIN wb_exposition_langue ON " . $this->nom_table . ".id = wb_exposition_langue.id_exposition" ;
    $req_sql .= " LEFT JOIN wb_langue ON wb_exposition_langue.langue = wb_langue.code_iso" ;
    $req_sql .= " WHERE wb_langue.default_langue = 'Y'" ;
    $req_sql .= " AND " . $this->nom_table . ".actif = 'Y'" ;
    $req_sql .= " AND wb_exposition_langue.titre != '".$titre."'" ;
    $req_sql .= " GROUP BY wb_exposition_langue.titre ";

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Alors je reprends ma première requête et je l'améliore...
    Je veux maintenant toutes les colonnes de ma table pour chaque Titre avec les données correspondant à la Max(Edition) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.*
    FROM TaTable t1
    INNER JOIN (
        SELECT Titre, MAX(Edition) AS DerniereEdition
        FROM TaTable
        GROUP BY Titre) t2
    ON t1.Titre = t2.Titre AND t1.Edition = t2.DerniereEdition
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Je viens d'essayer comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $req_sql = "SELECT DISTINCT " . $this->nom_table . ".id, wb_exposition_langue.titre, MAX(wb_exposition.edition) FROM " . $this->nom_table ;
    $req_sql .= " LEFT JOIN wb_exposition_langue ON " . $this->nom_table . ".id = wb_exposition_langue.id_exposition" ;
    $req_sql .= " LEFT JOIN wb_langue ON wb_exposition_langue.langue = wb_langue.code_iso" ;
    $req_sql .= " WHERE wb_langue.default_langue = 'Y'" ;
    $req_sql .= " AND " . $this->nom_table . ".actif = 'Y'" ;
    $req_sql .= " AND wb_exposition_langue.titre != '".$titre."'" ;
    $req_sql .= " AND wb_exposition.edition = MAX(wb_exposition.edition) " ;
    $req_sql .= " GROUP BY wb_exposition_langue.titre ";
    mais il me met :"Invalid use of group function "...
    Donc pas bon non plus

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je viens de corriger ma dernière requête qui n'était pas bonne.
    La nouvelle devrait aller.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Je viens seulement de voir ta réponse CinePhil...
    Merci.
    Par contre, je vois pas trop comment l'appliquer à mes tables parce que Edition et Titre ne sont pas dans la même table...
    Voici mes 2 tables :
    wb_exposition :
    Pièce jointe 34348

    et wb_exposition_langue :
    Pièce jointe 34349

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Essayons maintenant d'adapter le principe à ton cas précis...
    J'utilise uniquement SQL, tu adapteras à ton objet php.
    1) Rechercher les max(edition) de chaque titre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT el.titre, MAX(e.edition)
    FROM wb_exposition e
    INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition
    GROUP BY el.titre
    2) Joindre les deux tables pour avoir le titre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT e.*, el.titre
    FROM wb_exposition e
    INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition
    3) Utiliser les requêtes précédentes pour extraire les infos de la MAX(edition) de chaque titre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT e1.*, el1.titre
    FROM wb_exposition e1
    INNER JOIN ( wb_exposition_langue el1 
      INNER JOIN (
        SELECT el.titre, MAX(e.edition)
        FROM wb_exposition e
        INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition
        GROUP BY el.titre ) e2
      ON el1.Titre = e2.Titre )
    ON e1.id = el1.id_exposition
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Essayons maintenant d'adapter le principe à ton cas précis...
    J'utilise uniquement SQL, tu adapteras à ton objet php.
    1) Rechercher les max(edition) de chaque titre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT el.titre, MAX(e.edition)
    FROM wb_exposition e
    INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition
    GROUP BY el.titre
    2) Joindre les deux tables pour avoir le titre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT e.*, el.titre
    FROM wb_exposition e
    INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition
    3) Utiliser les requêtes précédentes pour extraire les infos de la MAX(edition) de chaque titre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT e1.*, el1.titre
    FROM wb_exposition e1
    INNER JOIN ( wb_exposition_langue el1 
      INNER JOIN (
        SELECT el.titre, MAX(e.edition)
        FROM wb_exposition e
        INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition
        GROUP BY 1 ) e2
      ON el1.Titre = e2.Titre )
    ON e1.id = el1.id_exposition
    If you type Google into Google, you Can break the internet" - The IT Crowd

  10. #10
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    buggen25
    T'es accro au Copier/Coller ?
    Sinon, j'ai adapté ta requête Philippe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $req_sql = "SELECT e.id, e.logo_expo, e1.titre, e.date_debut, e.date_fin, e1.descriptif, e.edition FROM wb_exposition e" ;
    $req_sql .= " INNER JOIN (wb_exposition_langue e1 INNER JOIN (SELECT el.titre, MAX(e.edition) ";
    $req_sql .= " FROM wb_exposition e ";
    $req_sql .= " INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition ";
    $req_sql .= " GROUP BY el.titre) " ;
    $req_sql .= "e2 ON el.titre = e2.titre ) ON e.id = el.id_exposition";
    et il met comme message d'erreur :
    Unknown column 'el.titre' in 'on clause'
    (au niveau du deuxième SELECT je pense)
    Et sinon, e2, ça correspond à quelle table ? C'est une sorte de table temporaire qui permet les INNER JOIN ? Je t'avoue que y'a des passages que je comprends pas trop...Comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    e2 ON el.titre = e2.titre

  11. #11
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Je m'étais planté dans l'alias des tables ...
    VOici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $req_sql = "SELECT e.id, e.logo_expo, e1.titre, e.date_debut, e.date_fin, e1.descriptif, e.edition FROM wb_exposition e" ;
    $req_sql .= " INNER JOIN (wb_exposition_langue e1 INNER JOIN (SELECT e1.titre, MAX(e.edition) ";
    $req_sql .= " FROM wb_exposition e ";
    $req_sql .= " INNER JOIN wb_exposition_langue e1 ON e.id = e1.id_exposition ";
    $req_sql .= " GROUP BY e1.titre) " ;
    $req_sql .= "e2 ON e1.titre = e2.titre ) ON e.id = e1.id_exposition";
    et en fait il m'affiche toutes les expos...

    (Au cas où, voici la requête affichée sur ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT e.id, e.logo_expo, e1.titre, e.date_debut, e.date_fin, e1.descriptif, e.edition 
    FROM wb_exposition e 
    INNER JOIN (wb_exposition_langue e1 
    INNER JOIN (SELECT e1.titre, MAX(e.edition) 
    FROM wb_exposition e 
    INNER JOIN wb_exposition_langue e1 ON e.id = e1.id_exposition 
    GROUP BY e1.titre) e2 ON e1.titre = e2.titre ) ON e.id = e1.id_exposition

  12. #12
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut req
    pourqui tu fais pas ce genre de requete :
    select champ1, champs2 from table1, table2 where table1.champ1=(select max(champ1) from table1);

    comme par exemple : (je sais pas si c juste )
    SELECT e.id, e.logo_expo, e1.titre, e.date_debut, e.date_fin, e1.descriptif, e.edition
    FROM wb_exposition e, wb_exposition e1 where e.edition = (select MAX(e.edition) from wb_exposition ) and e.id=e1.id_exposition
    If you type Google into Google, you Can break the internet" - The IT Crowd

  13. #13
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    J'ai essayé ta requête Buggen25, mais ça m'affiche tous les resultats aussi...
    Ce qui faut, c'est les enregistrements, pour chaque titre, et qui ont le champs 'Edition' le MAX pour chacun de ces titres...
    Et c'est galère...

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Évitons de réutiliser les mêmes alias...
    Essaye plutôt ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT t1.id, t1.logo_expo, t1.titre, t1.date_debut, t1.date_fin, t1.descriptif, t1.edition 
    FROM (
      SELECT e.*, el.titre
      FROM wb_exposition e
      INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition) t1
    INNER JOIN (
      SELECT el1.titre, MAX(e1.edition) AS DerniereEdition
      FROM wb_exposition e1 
      INNER JOIN wb_exposition_langue el1 ON e1.id = el1.id_exposition 
      GROUP BY el1.titre) t2 
    ON t1.titre = t2.titre AND t1.edition = t2.DerniereEdition
    t1 est la requête qui donne les infos de wb_exposition + le titre
    t2 est la requête qui donne le MAX(edition) de chaque titre
    Avec une jointure entre les deux ça devrait marcher.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Ca marche nickel
    Bon, je mets la requête, histoire de la voir "finalisée" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $req_sql =" SELECT t1.id, t1.logo_expo, t1.titre, t1.date_debut, t1.date_fin, t1.descriptif, t1.edition ";
    $req_sql .="	FROM ( ";
    $req_sql .=" SELECT e.*, el.titre, el.descriptif ";
    $req_sql .=" FROM wb_exposition e ";
    $req_sql .=" INNER JOIN wb_exposition_langue el ON e.id = el.id_exposition) t1 ";
    $req_sql .=" INNER JOIN ( ";
    $req_sql .=" SELECT el1.titre, MAX(e1.edition) AS DerniereEdition ";
    $req_sql .=" FROM wb_exposition e1 ";
    $req_sql .=" INNER JOIN wb_exposition_langue el1 ON e1.id = el1.id_exposition ";
    $req_sql .=" GROUP BY el1.titre) t2 ";
    $req_sql .=" ON t1.titre = t2.titre AND t1.edition = t2.DerniereEdition ";
    Je te remercie pour tout
    Parce que j'y serais pas arrivé avec toutes ces sous requêtes...

  16. #16
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    N'oublie pas
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Requete / filtre sur le MAX d'une colonne
    Par [ced] dans le forum DB2
    Réponses: 1
    Dernier message: 20/10/2010, 20h00
  2. Select avec max sur une date
    Par olibara dans le forum Requêtes
    Réponses: 10
    Dernier message: 06/07/2010, 07h18
  3. Réponses: 0
    Dernier message: 05/02/2008, 10h09
  4. Réponses: 5
    Dernier message: 10/12/2007, 15h24
  5. probleme requete select avec 2 colonnes
    Par cricri45000 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/04/2005, 10h39

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