Page 1 sur 1
Mysq dernier enregistrement
Posté : 22 févr. 2005, 16:46
par donatello
Une question moins bête:
comment fait-on pour sélectionner le dernier enregistrement inséré dans une base mysql?
Posté : 22 févr. 2005, 17:13
par Cyrano
COmme çca
Voir manuel
ICI
dernier enregistrement
Posté : 22 févr. 2005, 17:18
par donatello
Merci!
Posté : 22 févr. 2005, 17:24
par Cyrano
pas de quoi

dernier enregistrement
Posté : 22 févr. 2005, 17:47
par donatello
Ok, je vois. par contre, il y a une réponse que je n'ai pas trouvé.
Peut-on préciser de quelle table on veut le dernier enregistrement?
Comme ceci:
LAST_INSERT_ID(ma_table)
Posté : 22 févr. 2005, 17:58
par marsupilami
Celà ne fonctionne que pour le dernier enregistrement et non pour le dernier enregistrement d'une table donnée.
derneir enregistrement
Posté : 22 févr. 2005, 18:05
par donatello
ach, c'est malheureux mein freund.
en fait je fais des insertions dans plusieurs tables de la même base et je voudrais traiter ces tables séparément en faisant des LAST_INSERT_ID().
ya t il une solution dans mon cas?
Posté : 22 févr. 2005, 18:15
par marsupilami
Une solution très simple de ce type, et bien non !
Je suppose que tu as utilisé des clefs de type auto-increment ?
Il te faut faire des SELECT pour récupérer les bons enregistrements. Et attention de bien sélectionner les enregistrement avec une clause WHERE très restrictive. En fait, il ne suffit pas de récupérer le dernier enregistrement avec une clause ORDER BY et un LIMIT 1 ; tout simplement parce qu'un autre utilisateur a pu passer par là et créer de nouveaux enregistrements.
dernier enregistr mysql
Posté : 22 févr. 2005, 18:24
par donatello
en fait mes id ne sont pas auto increment.
Si j'ai bien compris, LAST_INSERT_ID() ne marche pas sans auto increment???
j'ai peur d'être vraiment dans la m...mouise.
Posté : 22 févr. 2005, 18:29
par marsupilami
Si tes ID ne sont pas auto-incrément celà signifie que tu les forces lorsque tu effectues un INSERT. Tu les connais donc à ce moment là ! Où est donc le problème ?
dernier enreg
Posté : 22 févr. 2005, 18:45
par donatello
Bon je t'explique:
Je crée l'ID moi même. Il est composé de 12 chiffres: la date du jour et un complément correspondant au n° de l'enregistrement.
Par exemple, pour le premier enregistrement de la base inséré today:
220220051
Ensuite, mon script php doit tout faire automatiquement pour les autres enregistrements insérés par formulaire: déterminer la date du jour et incrémenter le dernier chiffre. ex: 220220052, 230220053....
Jusque là pas de pb g sais faire.
Par contre, je ne vois pas comment mysql peut sélectionner le dernier enregistrement créé pour effectuer les diverses opérations car:
1- je ne suis pas en auto increment donc pas de LAST_INSERT_ID
2- mes id sont composés de dates donc l'id le plus élevé n'est pas forcément le plus récent.
Voili voilou.
Posté : 22 févr. 2005, 18:55
par marsupilami
Ouille ! Je vois le souci. Le script qui a besoin du dernier enregistrement ne suit pas le script qui a inséré le dernier enregistrement, il ne peut donc pas y avoir de transfert par variable de session entre les deux, ce que j'avais cru au début.
Tu maîtrises le format de l'id, tu peux donc
en théorie tout faire ! La grosse bidouille consiste en le découpage de ton id selon les champs qui le composent et en leur réorganisation dans un ordre qui permet le tri.
En résumé :
- le champ est ainsi créé : JJ + MM + AAAA + ordre
- découper avec des substr, c'est faisable en MySQL mais c'est anti performances
- ordonner ainsi : AAAA + MM + JJ + ordre
- trier (descendant) sur la valeur de ce nouveau champ
- récupérer la première valeur
Tu vois c'est de la grosse bidouille. Ce que je te conseille est plutôt général. Lorsque tu utilises des dates débrouilles toi pour avoir des dates au format ISO, c'est à dire AAAA-MM-JJ. Dans ce cas un simple ORDER BY permet de trier les enregistrements. En ce qui concerne le numéro d'ordre écrit le sur 2 ou 3 digits (001,002,003, ...) histoire que 3 ne soit pas après 10

Posté : 22 févr. 2005, 19:03
par renan44
Ne serais-ce pa plus simple d'ajouter un champ date, et de mettre un champ id qui n'est pas incrémenté ?
Il te suffirait alors juste de trier les id dans l'ordre quand le champ date est égal à tel ou tel date...
Qu'en penses-tu ?
dernier enregistremenet mysql
Posté : 22 févr. 2005, 20:11
par donatello
Pour répondre à renan, il y a dejà un champs date. seulement, c'est important pour moi d'avoir un id distinct composé de la date et d'un numéro d'ordre.
Je pense que ta solution conviendra, marsu. merci!