{Mysql} Récupérer ID d'un enregistrement

Fermé
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 - 22 sept. 2009 à 10:34
demattos Messages postés 2 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 1 janvier 2015 - 1 janv. 2015 à 16:37
Bonjour,

je souhaite récupérer l'ID d'un enregistrement qui vient de se réaliser sans refaire une requête !
Existe t-il un moyen de sauvegarder cet ID précédement créé ?

En gros, je créé une ligne quelque part puis j'ai besoin de l'ID de cette ligne pour l'insérer dans un nouvel enregistrement!

Merci

3 réponses

CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
22 sept. 2009 à 11:41
Bonjour.

mysql_insert_id(); (Si tu parles de php)
2
Bonjour gaerebu

Petit conseil : décrit verbalement tous les détails de ce que tu veux faire. Ensuite, la solution technique sera plus facile à trouver, mais bon on va prendre quelques hypothèses :
Je suppose que :
1) la table dans laquelle tu viens d'insérer un élément est de type auto-increment
2) La table se nomme MA_TABLE et possède une colonne nommée ID
3) La deuxième table, MA_TABLE_HISTO a une colonne ID, une colonne ID_MA_TABLE qui devra contenir l'ID qui a été inséré dans MA_TABLE, une colonne DATE_INSERT, et un commentaire.

Plusieurs solutions sont possibles, mais ça dépend aussi de la façon avec laquelle tu accède à la base :

Cas n° 1 : Il n'y a qu'un seul utilisateur à la fois qui accède à la base : solution triviale
Il te suffit de faire une requête :
SELECT MAX(MA_TABLE.ID) FROM MA_TABLE

Ce qui te retournera la dernière valeur saisie puisqu'on est autoincrement.
Cas n° 2 plus propre, on utilise la fonction mysql ; LAST_INSERT_ID()
comme ci-dessous :
INSERT INTO MA_TABLE (NOM) VALUES ('PREMIER');
INSERT INTO HISTO_MA_TABLE (ID_MA_TABLE, COMMENTAIRE) VALUES(LAST_INSERT_ID(),'Commentaire du premier' ); 

Le problème est que, comme dans le premier cas, si quelqu'un insère entre temps quelque chose dans une table, l'id peut-être faux.
Par contre, je pense que si tu place ces deux appels dans une transaction, tu ne devrait pas avoir de problème
A noter : si tu travaille en PHP, il existe une fonction PHP nommée mysql_insert_id() qui fait n gros la m^me chose, sauf qu'elle peut retourner une valeur fausse si l'ID est un BIGINT et pas un INT.
Il y a aussi des méthode utilisant un trigger mais inutile de chercher trop complexe, surtout si tu n'es pas un chevronné des BD?

Je ne prétend pas que c'est la solution absolue, mais tu as une piste, continue !
1
demattos Messages postés 2 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 1 janvier 2015
1 janv. 2015 à 16:37
Comme ça vous pouvez récupérer tous les champs de votre base de données. ;-)


SELECT * FROM tbl_etc WHERE id=LAST_INSERT_ID();



Bien à vous !


DeMattos
0