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 le dernier id d'un table


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut Récupérer le dernier id d'un table
    Salut a tous,

    je voudrais savoir si il existait une requette permettant de récuperer uniquement le dernier id d'une table? Afin d'éviter de parcourir tout le tableau pour récuperer l'id max (ce qui coute assez cher en temps de clacul).
    manganimes (en construction) -
    zemanga

  2. #2
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    J'ai cherché dans la faq et j'ai TROUVE !!!

    Comme quoi il faut bien réspecter les regles du forum avant de poster .

    Pour récupérer le dernier id il faut faire:

    $sql="SELECT * FROM `latable` ORDER BY `id` desc LIMIT 1";
    manganimes (en construction) -
    zemanga

  3. #3
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Euh... pas sûr !

    En effet, le ORDER BY fait un tri (complexité O(n^2) ) et donc la recherche du MAX risque d'être plus performante (complexité O(n) seulement) .

    Il faudra toutefois que l'on confirme ou infirme ce que je viens de dire, et que l'on corrige la FAQ le cas échéant.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    La différence de performance ne devrait pas être si grande que ça :

    If you use LIMIT row_count with ORDER BY, MySQL ends the sorting as soon as it has found the first row_count rows of the sorted result, rather than sorting the entire result. If ordering is done by using an index, this is very fast. If a filesort must be done, all rows that match the query without the LIMIT clause must be selected, and most or all of them must be sorted, before it can be ascertained that the first row_count rows have been found. In either case, once the rows have been found, there is no need to sort any remainder of the result set, and MySQL does not do so.
    De plus avec cette méthode, on peut retourner la ligne entière alors qu'avec un MAX() il faut faire 2 requêtes ou une requête imbriquée, ce qui élimine le gain éventuel de performance.
    Pensez au bouton

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    J'avais compris que Death83 voulait récupérer le dernier id, et non le dernier enregistrement (id + autres colonnes), c'est pour ça que j'ai pensé au MAX.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  6. #6
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Tout à fait mais l'intitulé de la question de la FAQ à laquelle fait allusion Death83 est "Comment récupérer le dernier enregistrement inséré ?"
    Enfin les deux sont viables de toute façon.

    Au passage Death83 merci de mettre le sujet en [Résolu] si c'est le cas...
    Pensez au bouton

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

Discussions similaires

  1. récupérer la derniere ligne d'une table?
    Par purplebamboo dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 09/04/2009, 16h41
  2. Réponses: 3
    Dernier message: 25/06/2008, 15h21
  3. récupérer les dernieres lignes d'une table
    Par steave dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2008, 12h26
  4. [MySQL] Récupérer le dernier enregistrement d'une table
    Par killuaster dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/03/2007, 11h55
  5. récupérer le dernier enregistrement d'une table
    Par kuhnden dans le forum Access
    Réponses: 4
    Dernier message: 21/02/2007, 21h47

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