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 :

récupérer des lignes MySQL triées en une seule requête


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut récupérer des lignes MySQL triées en une seule requête
    Hello,

    Voila le truc :

    J'ai une table contenu (InnoDB) avec les champs suivants :
    - ID (int)
    - CODE (varchar)
    - VERSION (tinyint)

    J'ai plusieurs lignes qui peuvent avoir le CODE identique mais avec des versions différentes (incrémentés).

    Exemple :
    ID|CODE|VERSION
    1|COD1|1
    2|COD2|1
    3|COD2|2

    Et je voudrais en une requête récupérer :
    ID|CODE|VERSION
    1|COD1|1
    3|COD2|2

    Je m'arrache en essayant des select dans des select, des group by, et même des heaving mais rien de ça fonctionne...

    Pouvez-vous me renseigner ?

    Merci par avance

  2. #2
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Points : 327
    Points
    327
    Par défaut
    ce n'est pa tré claire!

    Si je comprend bien, en gros, tu veut recuperer la derniere version de chaque code?!!!

  3. #3
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Points : 327
    Points
    327
    Par défaut
    si c'est le cas alors, voilà une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT *
    FROM `table` AS resultat
    WHERE resultat.version = (
    SELECT DISTINCT version
    FROM `table` AS test
    WHERE resultat.code = test.code
    ORDER BY test.version DESC
    LIMIT 0 , 1 )
    j'explique, ce code recupere la derniere version de chaque "resultat.code":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT version
    FROM `table` AS test
    WHERE resultat.code = test.code
    ORDER BY test.version DESC
    LIMIT 0 , 1
    bon, j'ai testé ce code et ça marche tré bien! au cas ou cen'est pas ce dont tu as besoin alors désolé!

  4. #4
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Points : 327
    Points
    327
    Par défaut
    desolé, vraiment désolé, les codes en dessus marche mais ne sont pas bons:
    -trop long (en code)
    -tro lent (en traitement)

    Voilà un bon code qui permet de faire la meme manipulation, je te recommande d'utiliser celle-ci!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT id, code, MAX( version )
    FROM `table`
    GROUP BY code
    encore désolé!

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par AASProni Voir le message
    Voilà un bon code qui permet de faire la meme manipulation, je te recommande d'utiliser celle-ci!
    Non votre requête n'est pas bonne, elle renvoie un id aléatoire et non pas l'id correspondant au max(version).
    Avec mysql, il n'y a pas le choix il faut passer par une sous requête le plus classique étant avec une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select t.id, t.code, temp.max_version
      from latable t
      join (SELECT code, MAX(version) as max_version
              FROM latable
             GROUP BY code
            ) temp 
        on temp.code = t.code
       and temp.max_version = t.version
    A lire autour du group by et mysql :
    http://cedric-duprez.developpez.com/...fier-group-by/

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut récupérer des lignes MySQL triées en une seule requête
    Merci beaucoup pour vos réponses !

    Je vais tester les solutions proposés et vous tiens au courant.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/06/2013, 09h14
  2. Top 5 (comptage et tri) en une seule requête
    Par Iohan dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2010, 15h58
  3. Faire un Top 5 (comptage et tri) en une seule requête
    Par Iohan dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/01/2010, 15h57
  4. Récupérer des lignes non enregistrées dans une table
    Par leddy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/04/2008, 15h09
  5. Réponses: 3
    Dernier message: 09/02/2007, 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