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 :

[auto_increment] Récupérer la prochaine valeur


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut [auto_increment] Récupérer la prochaine valeur
    Y'en a qui vont crier

    Mon cas me semble désespéré...
    Ce que je veux c'est obtenir le prochain numéro de la séquence avec une requête SQL.

    Parmis les différentes techniques que vous avez déjà données, aucune ne convient :
    • SELECT LAST_INSERT_ID(); renvoie le dernier identifiant utilisé pour insérer une donnée. Mais si on n'en a pas encore inséré ?
    • SELECT * FROM table WHERE auto_increment IS NULL (cf FAQ MySql) me dit que le champs auto_increment n'existe pas.
    • mysql_insert_id() (de l'API mysql) n'est pas une requête SQL.


    En PostGreSql ce serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nextval('seq_machin');
    mais chez MySql ça n'a pas l'air simple
    Alors si vous avez une requête qui me satisfasse, je vous béni !
    Membre du comité "Mort aux cons ! ARG..."
    Plus on essaye, et plus on a de chances de réussir... proverbe Shadok.
    Pensez au tag [Résolu], merci.

  2. #2
    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 Re: [auto_increment] Récupérer la prochaine valeur
    Citation Envoyé par Kimael
    SELECT LAST_INSERT_ID(); renvoie le dernier identifiant utilisé pour insérer une donnée. Mais si on n'en a pas encore inséré ?
    Rien me semble-t-il (aucun enregistrement).

    Citation Envoyé par Kimael
    SELECT * FROM table WHERE auto_increment IS NULL (cf FAQ MySql) me dit que le champs auto_increment n'existe pas
    Idem chez moi. Je ne connaissais pas cette méthode, elle n'a pas l'air de bien fonctionner
    Pensez au bouton

  3. #3
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut Re: [auto_increment] Récupérer la prochaine valeur
    Citation Envoyé par Maximilian
    Rien me semble-t-il (aucun enregistrement).
    Oui, j'avais cru remarquer aussi... et moi il me faut un entire A TOUS LES COUPS
    Citation Envoyé par Maximilian
    Idem chez moi. Je ne connaissais pas cette méthode, elle n'a pas l'air de bien fonctionner
    Allez, je donne une solution (de mer*e) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT MAX(nb) FROM
    (
      (SELECT 1 AS nb)
      UNION
      (SELECT MAX(id) AS nb FROM ma_table)
    );
    UNION ne fonctionne qu'à partir de MySql 4.0.0 !
    id est (évidement) la colonne auto-incrémentée
    Le problème avec cette technique, c'est que si quelqu'un insère entre-temps, bah ça marche pas bien (si on veut insérer derrière) !

    Remarque (qui n'a rien a voir) : si on nomme une table table, les requêtes SQL déconnent (j'ai MySql < 4 pour l'instant) :p
    Membre du comité "Mort aux cons ! ARG..."
    Plus on essaye, et plus on a de chances de réussir... proverbe Shadok.
    Pensez au tag [Résolu], merci.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Points : 139
    Points
    139
    Par défaut
    bon je propose mais je suis pas un dieu !
    si tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(id) FROM table;
    tu as déjà le dernier id inséré (si t'en a pas supprimés)
    puis si tu fais une transaction pour insérer en forçan l'id à max(id)+1. Si ça marche tant mieux, sinon tu te rappelles avec max(id)+2 et re.

    sais pas si c'est réaliste ou fonctionnel comme idée

  5. #5
    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 Re: [auto_increment] Récupérer la prochaine valeur
    Citation Envoyé par Kimael
    Citation Envoyé par Maximilian
    Rien me semble-t-il (aucun enregistrement).
    Oui, j'avais cru remarquer aussi... et moi il me faut un entire A TOUS LES COUPS
    Apparemment, mySQL diffère de Postgres en ce que l'auto-incrément est créé à la première insertion et pas à la création de la table. Enfin, c'est ce que j'en déduis...
    Mais pourquoi veux-tu absolument que la requête retourne quelque chose ? Si c'est géré par du code, on peut tout à fait détecter le renvoi d'un recordset vide
    Pensez au bouton

  6. #6
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Maximilian
    Mais pourquoi veux-tu absolument que la requête retourne quelque chose ? Si c'est géré par du code, on peut tout à fait détecter le renvoi d'un recordset vide
    Je met en place l'exemple donné avec OSWorkflow et il y a un champs statique à renseigner dans un fichier XML qui doit être une requête SQL qui renvoie le prochain entier de la séquence d'une table.

    Citation Envoyé par Wavyx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(id) FROM table;
    C'est une très bonne idée (si tu lis plus haut, j'ai eu la même), sauf qu'il n'y a pas de code...

    J'abandonne l'idée de faire un truc propre...
    à tous
    Membre du comité "Mort aux cons ! ARG..."
    Plus on essaye, et plus on a de chances de réussir... proverbe Shadok.
    Pensez au tag [Résolu], merci.

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par Kimael
    J'abandonne l'idée de faire un truc propre...
    l'échec ce n'est pas quand on cherche et que ca ne fonctionne pas mais quand on arrête de chercher (bon ok j'ai entendu ca dans le film "999 fantomes")

    utilise cette commande : il ne faut pas utiliser le coup du MAX+1 parce que si tu supprimes le dernier enregistrement par exemple, le prochain ajout aura la valeur MAX+2 !!

  8. #8
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par mathix
    il ne faut pas utiliser le coup du MAX+1 parce que si tu supprimes le dernier enregistrement par exemple, le prochain ajout aura la valeur MAX+2 !!
    J'ai pas tout compris là :

    Et puis la commande SHOW TABLE STATUS, je ne peux pas faire de SELECT dessus, si ?!
    Membre du comité "Mort aux cons ! ARG..."
    Plus on essaye, et plus on a de chances de réussir... proverbe Shadok.
    Pensez au tag [Résolu], merci.

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par Kimael
    Citation Envoyé par mathix
    il ne faut pas utiliser le coup du MAX+1 parce que si tu supprimes le dernier enregistrement par exemple, le prochain ajout aura la valeur MAX+2 !!
    J'ai pas tout compris là :
    exemple :
    - ton ID le plus grand est 51 dans la table et AUTO_INCREMENT (prochaine valeur) est à 52
    - tu rajoute un enregistrement : il recois l'ID 52 et AUTO_INCREMENT est mis à 53
    - tu supprimes l'enregistrement 52, AUTO_INCREMENT est toujours à 53
    dans ce cas là tu est dans une configuration où l'ID le plus grand est 51 mais le prochain enregistrement recois l'ID 53

    Citation Envoyé par Kimael
    Et puis la commande SHOW TABLE STATUS, je ne peux pas faire de SELECT dessus, si ?!
    peut être si tu as une version qui supporte les requêtes imbriqués
    sinon tu fait ton découpage du coté client mysql

  10. #10
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par mathix
    Peut être si tu as une version qui supporte les requêtes imbriqués
    Mysql Version 4.0.15 et ça ne fonctionne pas.

    Citation Envoyé par mathix
    Sinon tu fait ton découpage du coté client mysql
    Je ne peux pas, il me faut une requête SQL.
    Membre du comité "Mort aux cons ! ARG..."
    Plus on essaye, et plus on a de chances de réussir... proverbe Shadok.
    Pensez au tag [Résolu], merci.

  11. #11
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Membre du comité "Mort aux cons ! ARG..."
    Plus on essaye, et plus on a de chances de réussir... proverbe Shadok.
    Pensez au tag [Résolu], merci.

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

Discussions similaires

  1. connaître la prochaine valeur d'un auto_increment
    Par Vilukariok dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/05/2011, 08h53
  2. Réponses: 12
    Dernier message: 04/02/2009, 12h44
  3. Trouver la prochaine valeur d'incrementation
    Par subzero82 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/09/2005, 13h21
  4. [Séquences] Pour récupérer la dernière valeur
    Par tnodev dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 24/05/2005, 11h35
  5. prochaine valeur de l'auto increment
    Par bp dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/05/2005, 15h17

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