Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2010, 17h08   #1
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Par défaut Dernier Id généré du table

Re bonjour

J'ai vu qu'il existait une fonction mysql_insert_id qui permettait de savoir quel était le dernier id d'une base en cours à avoir été généré.

N'existe t-il pas la même chose mais sur une table en particulier ?
Car à part faire un select max(id) from table je ne trouve rien d'autre.

Vous confirmez ?

Merci à vous et bonnes fêtes.
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 18h14   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
mysql_insert_id ne retourne pas le dernier id d'une base mais le dernier id generé dans la connexion en cours.

Sinon pour avoir le dernier enregistrement d'une table tu peux faire max(id) ou ORDER DESC LIMIT 1
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 18h45   #3
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Citation:
Envoyé par sabotage Voir le message
mysql_insert_id ne retourne pas le dernier id d'une base mais le dernier id generé dans la connexion en cours.

Sinon pour avoir le dernier enregistrement d'une table tu peux faire max(id) ou ORDER DESC LIMIT 1
Merci pour la précision
Donc si je suis dans une connexion sur une table X alors cela me renvoie le dernier id de cette table X ?

Merci
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 19h01   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Non, cela ne renvoit qu'un id generé pendant la connexion.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/12/2010, 13h17   #5
Membre habitué
 
Avatar de elvan49
 
Laurent
Développeur Web
Inscription : octobre 2006
Messages : 226
Détails du profil
Informations personnelles :
Nom : Laurent
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2006
Messages : 226
Points : 141
Points : 141
Envoyer un message via Skype™ à elvan49
Par défaut ORDER

La solution c'est bien
Code :
ORDER BY id DESC LIMIT 1
Si tu n'es pas en train de faire des requêtes INSERT.
Car si c'est le cas, mysql_insert_id() reste encore le moyen le plus simple. En effet tu es sur la table dans laquelle tu viens de faire ton insert et tu récupères dans la foulée l'id généré (donc le dernier de la table en question.

Dans les autres cas, en ordonnant par id DESC et en ne récupérant que le premier enregistrement de cet ordre tu auras automatiquement le dernier (si tant est que tes id sont générés en auto_increment...)
__________________
"n'imprimez ces messages que si nécessaire... Préservez notre planète"
elvan49 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/12/2010, 13h48   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
bonjour,

si le but est de récupérer le dernier id immédiatement crée après une insertion, tu peux mais surtout tu dois le faire via une procédure stockée afin d'éviter tout problème de création intermédiaire entre la création et la récupération de l'id
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h38   #7
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Citation:
Envoyé par sabotage Voir le message
Non, cela ne renvoit qu'un id generé pendant la connexion.
Merci encore
Mais on peut penser alors, qu'étant en local sur ma machine, et le seul utilisateur du programme que j'écris, et que ma requête INSERT vient de travailler sur une table particulière, que je récupère obligatoirement l'id voulu ?
J'espère avoir été clair.
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h40   #8
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Citation:
Envoyé par Madfrix Voir le message
bonjour,

si le but est de récupérer le dernier id immédiatement crée après une insertion, tu peux mais surtout tu dois le faire via une procédure stockée afin d'éviter tout problème de création intermédiaire entre la création et la récupération de l'id
Hello
Oui je suis surtout dans le cas d'un INSERT
En gros, je créé un nouvel item dans une table et je souhaite confirmer tout de suite l'ajout en affichant une page qui affiche une fiche récapitulative de l'élément ajouté.
Je souhaite donc passer dans l'url cet id créé.
Y aurait-il une autre solution plus "classe" ?
Merci
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h42   #9
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Citation:
Envoyé par elvan49 Voir le message
La solution c'est bien
Code :
ORDER BY id DESC LIMIT 1
Si tu n'es pas en train de faire des requêtes INSERT.
Car si c'est le cas, mysql_insert_id() reste encore le moyen le plus simple. En effet tu es sur la table dans laquelle tu viens de faire ton insert et tu récupères dans la foulée l'id généré (donc le dernier de la table en question.

Dans les autres cas, en ordonnant par id DESC et en ne récupérant que le premier enregistrement de cet ordre tu auras automatiquement le dernier (si tant est que tes id sont générés en auto_increment...)
Salut Elvan
Je n'ai pas bien saisi le début de ton message
Qu'entends tu par je cite
"La solution c'est bien
Code :
ORDER BY id DESC LIMIT 1
"

Merci à toi
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h47   #10
Membre habitué
 
Avatar de elvan49
 
Laurent
Développeur Web
Inscription : octobre 2006
Messages : 226
Détails du profil
Informations personnelles :
Nom : Laurent
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2006
Messages : 226
Points : 141
Points : 141
Envoyer un message via Skype™ à elvan49
Te torture pas,
la solution classe c'est la procédure. Mais dans ton cas, puisque tu es le seul utilisateur. Y a pas plus simple que mysql_insert_id().
Et ce qui est simple est on ne peut plus classe !!

Code :
1
2
3
4
5
$sql = "INSERT *** INTO **** (***) VALUES('***);";
$result = mysql_query($sql,$connexion);
$id = mysql_insert_id();
// dans la foulée
header("Location: mapage.php?id=$id");
__________________
"n'imprimez ces messages que si nécessaire... Préservez notre planète"
elvan49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 09h57   #11
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Citation:
Envoyé par elvan49 Voir le message
Te torture pas,
la solution classe c'est la procédure. Mais dans ton cas, puisque tu es le seul utilisateur. Y a pas plus simple que mysql_insert_id().
Et ce qui est simple est on ne peut plus classe !!

Code :
1
2
3
4
5
$sql = "INSERT *** INTO **** (***) VALUES('***);";
$result = mysql_query($sql,$connexion);
$id = mysql_insert_id();
// dans la foulée
header("Location: mapage.php?id=$id");

Merci pour toutes ces explications qui me font avancer !!!
C'est cool !
Ceci c'est aussi pour mieux revenir avec d'autres questions
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h05.


 
 
 
 
Partenaires

Hébergement Web