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

PHP & Base de données Discussion :

[SQL] Récupèrer un identifiant pour l'auto incrementer


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Par défaut [SQL] Récupèrer un identifiant pour l'auto incrementer
    En fait je voudrais récupérer le dernier Numéro de licencies rentrés et lui ajouter 1 quelqu'un aurait-il une solution voici mon code
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
        mysql_select_db('connexion',$db)  or die('Erreur de selection '.mysql_error()); 
        $sql3 = mysql_query('SELECT max(Num_licencies) FROM Licencies') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
        $row = mysql_result($sql3, 2);
        $sql = "INSERT INTO licencies(Nom_licencies, Num_licencies, Prenom_licencies,club, path_photo, date_naissance) VALUES('$nom','$row','$prenom','$club','$path_photo','$date_naiss')"; 
         $sql2 = "INSERT INTO auth(login, motdepasse, ip) VALUES ('$login','$mdp','')"; 
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
        mysql_query($sql2) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
        echo 'Vos infos on été ajoutées.'; 
     
        mysql_close();  // on ferme la connexion 
        }
     
    ?>

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Bonjour,
    Pourquoi ne mets tu pas ton champ en AUTOINCREMENT ?

    1 : ça t'éviteras de faire de savants calculs qui , en cas de concurrence (de requêtes) , pourraient s'avérer hasardeux.
    2 : Tu vas gagner du temps
    3 : C'est fait pour !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Par défaut
    Bonjour,

    L'autoincrement n'est pas toujours souhaitable pour plusieurs raisons, notamment qu'une suppression d'enregistrement fait qu'on perd la référence dans le champ autoincrémenté. Le numéro effacé devient irrécupérable. C'est parfois gênant, surtout sur des tables qui grossissent vite et qu'il faut maintenir en faisant de l'effacement/archivage, puis de la récupération d'identifiant pour les récupérer.

    L'idée, si le champ n'est pas en autoincrement, serait peut-être de récupérer la plus grande valeur du champ avec la fonction SQL MAX(), et d'y ajouter 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT MAX(Num_licencies) FROM licencies;
    pour récupérer le plus grand identifiant, puis le traiter en PHP en l'incrémentant et l'affecter à $row.

    Sinon, tu peux essayer ça, mais je ne suis pas sûr de mon coup:
    $sql = "INSERT INTO licencies(Nom_licencies, Num_licencies, Prenom_licencies,club, path_photo, date_naissance) VALUES('$nom',MAX(Num_licencies)+1,'$prenom','$club','$path_photo','$date_naiss')";

    Je ne suis pas sûr que l'on puisse utiliser MAX dans cette partie de la requête, je crois que c'est utilisable uniquement dans un SELECT (à vérifier), donc dans ce cas il faut passer par une première requête sélection comme je l'indiquais au début.

    Sinon, sur un champ autoincrement, c'est très facile de récupérer le dernier numéro d'identifiant créé, grâce à la fonction SQL LAST_INSERT_ID()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT LAST_INSERT_ID();

  4. #4
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    L'idée, si le champ n'est pas en autoincrement, serait peut-être de récupérer la plus grande valeur du champ avec la fonction SQL MAX(), et d'y ajouter 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT MAX(Num_licencies) FROM licencies;
    Attention :
    En cas d'une insertion concurrente, tu n'es absolument pas certain d'envoyer le dernier id + 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT LAST_INSERT_ID();
    Attention , ici c'est mysql_insert_id() à mettre de suite àprés ta requete INSERT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $LastId = mysql_insert_id();

  5. #5
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Par défaut
    Hard a très bien résumé ce que je voulais faire lauto increment c'est bien mais si je teste et que je supprime des champs bah il ne se remet jamais à 0 que dans ce cas t'es sur d'avoir le numéro suivant donc vous me conseillez quoi alors car le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT max(Num_licencies)+1 FROM Licencies
    ca ne fonctionne pas
    en fait faudrait récupérer le résultat de cette requête puis lui ajouter 1 dans le INSERT maintenant je ne sais pas comment

  6. #6
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    si tu es en test et que tu veux remettre à 0 (c'est à dire vider la table),
    utilise TRUNCATE TABLE matable
    Le champ AUTOINCREMENT sera à nouveau à 0

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Par défaut
    Citation Envoyé par klr54000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT max(Num_licencies)+1 FROM Licencies
    ca ne fonctionne pas
    C'est quoi l'erreur retournée ?

Discussions similaires

  1. récupérer les identifiants pour traitement
    Par pontarose dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2011, 10h33
  2. Réponses: 5
    Dernier message: 11/02/2011, 09h04
  3. Récupérer la valeur de l'auto increment apres insertion en base
    Par altiman dans le forum Persistance des données
    Réponses: 5
    Dernier message: 02/06/2008, 11h47
  4. zerofill pour champ auto-increment
    Par seb92 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/07/2004, 15h52
  5. Réponses: 2
    Dernier message: 05/01/2004, 11h23

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