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écuperer les derniers ID d'une liste


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 35
    Points
    35
    Par défaut Récuperer les derniers ID d'une liste
    Bonjour,

    J'ai une table avec des clients en doublons et je voudrais récupérer les derniers enregistrements de chaque client mais je ne vois pas comment faire... Quelqu'un a une petite idée?

    MaTable
    |--------------------------------|
    | ID | NOM | CHAMPS1 |
    |--------------------------------|
    | 1 | client1 | txt1 |
    | 2 | client2 | txt2 |
    | 3 | client3 | txt3 |
    | 4 | client1 | txt4 |
    | 5 | client2 | txt5 |
    | 6 | client3 | txt6 |
    | 7 | client3 | txt7 |
    | 8 | client4 | txt8 |
    |------|---------|---------------|

    Et il faudrait que je récupère seulement les lignes 4,5,7,8

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 65
    Points : 55
    Points
    55
    Par défaut Hello
    Salut,

    Juste une petite question: Il y a bp de clients dans ta table?

    Cdt,

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 35
    Points
    35
    Par défaut
    Oui il y en a quelques uns mais il risque d'avoir de nouvelles entrées au fur et à mesure du temps.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 65
    Points : 55
    Points
    55
    Par défaut Re!
    Salut,

    J'ai une idée mais cela doit être vérifiée:

    Solution possible 1° :Créer une deuxième table (Table2) avec un champ [Identifiant] et un champ [Name] (sans doublons)

    |-----------|--------|
    | Identifiant | Name |
    |-----------|--------|
    | 1 | client1 |
    | 2 | client2 |
    | 3 | client3 |
    | 4 | client4 |
    |... |... |
    |-----------|--------|


    Avec cette 2ème table, c'est possible de faire une boucle.
    Idée principale:

    Boucle:
    i =1, i< nbrenseigement de Table2

    Select * from Tatable where Tatable.ID in
    (
    Select Tatable.Max(ID)
    From Tatable, Table2
    Where Identifiant = i AND Table2.Name=Tatable.NOM
    )
    group by Tatable.ID
    order by Tatable.ID

    i++
    Fin de Boucle

    Solution possible 2°: Ajouter un champ supplémentaire dans ta table comme [Date de MAJ]. Ainsi tu peux récupérer les dernières enregistrements des clients en fonction de la comparasion de date.

    Ce sont seulement des idées qui est peut-être pas la solution la plus simple.
    C'est à toi à voir leurs faisabilités

    Bonne journée,

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Bonjour,
    Si ton champ `id` est dans l'ordre chrologique (le dernier enregistrement = le plus grand numéro), alors :
    SELECT t1.`id`, t1.`nom`, t1.`champ1`
    FROM `ma_table` AS t1
    LEFT JOIN `ma_table` AS t2 ON t1.`nom` = t2.`nom`
    GROUP BY t1.`nom`, t1.`id`
    HAVING t1.`id` = MAX(t2.`id`)
    (j'ai l'impression que je vais me faire tuer pour mon LEFT JOIN, et pourtant, ça marche...)

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Citation Envoyé par papa6 Voir le message
    (j'ai l'impression que je vais me faire tuer pour mon LEFT JOIN, et pourtant, ça marche...)
    Peut-être pas "tuer" , mais c'est vrai qu'un simple INNER JOIN suffit ici...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Je devais faire un Delete sur les premiers éléments doublons de ma base.
    Or le Delete n'admet pas la clause Having, même avec la syntaxe Delete from where cle in(Select... having...)

    La solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t1.`id`, t1.`nom`, t1.`champ1`
    FROM `ma_table` AS t1
    INNER JOIN `ma_table` AS t2 ON t1.`nom` = t2.`nom` AND t1.`id` < t2.`id`
    Une fois que vous avez vérifié que le Sélect ne retourne QUE ce que vous voulez supprimer, ça donne avec le delete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE t1 
    FROM `ma_table` AS t1
    INNER JOIN `ma_table` AS t2 ON t1.`nom` = t2.`nom` AND t1.`id` < t2.`id`
    Un 'tit "résolu" ?

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

Discussions similaires

  1. récuperer les données cochées dans une listbox dans une nouvelle liste
    Par Lost_in_VBA dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/07/2011, 12h12
  2. Réponses: 1
    Dernier message: 24/04/2006, 01h55
  3. comment rechercher les derniers enregistrement d'une table ?
    Par hornetboy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2005, 09h13
  4. Récuperer le 2eme champ d'une liste déroulante
    Par priest69 dans le forum Access
    Réponses: 2
    Dernier message: 07/09/2005, 19h07
  5. selectionner le dernier element d'une liste box
    Par adilou1981 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/03/2005, 10h19

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