Mysq dernier enregistrement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mysq dernier enregistrement

dernier enregistremenet mysql

par donatello » 22 févr. 2005, 20:11

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!

par renan44 » 22 févr. 2005, 19:03

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 ?

par marsupilami » 22 févr. 2005, 18:55

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 :roll:
- 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 :wink:

dernier enreg

par donatello » 22 févr. 2005, 18:45

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.

par marsupilami » 22 févr. 2005, 18:29

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 enregistr mysql

par donatello » 22 févr. 2005, 18:24

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.

par marsupilami » 22 févr. 2005, 18:15

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.

derneir enregistrement

par donatello » 22 févr. 2005, 18:05

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?

par marsupilami » 22 févr. 2005, 17:58

Celà ne fonctionne que pour le dernier enregistrement et non pour le dernier enregistrement d'une table donnée.

dernier enregistrement

par donatello » 22 févr. 2005, 17:47

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)

par Cyrano » 22 févr. 2005, 17:24

pas de quoi ;)

dernier enregistrement

par donatello » 22 févr. 2005, 17:18

Merci!

par Cyrano » 22 févr. 2005, 17:13

COmme çca ;)

Code : Tout sélectionner

SELECT LAST_INSERT_ID()
Voir manuel ICI

Mysq dernier enregistrement

par donatello » 22 févr. 2005, 16:46

Une question moins bête:

comment fait-on pour sélectionner le dernier enregistrement inséré dans une base mysql?