Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
990 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] LOOP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] LOOP

n°2232765
brutax
Posté le 05-07-2014 à 13:42:49  profilanswer
 

Salut à tous  :bounce:  
 
Voilà, j'ai une table mysql "educateurs" où, pour chaque modification d'enregistrement, je ne fais pas un UPDATE mais un INSERT INTO afin de pouvoir afficher l'historique des modifications. Grosso modo, ça donne ça :
 
Mise à jour d'un educateur :

Code :
  1. INSERT INTO educateurs VALUES (
  2. '', -> nouvel identifiant généré automatiquement
  3. '$id', -> ancien identifiant
  4. (..données diverses..),
  5. '1' -> flag indiquant que l'enregistrement estactif.
  6. );
  7. UPDATE educateurs SET actif='0' WHERE id='$id';
  8. -> je mets à jour l'ancien enregistrement pour indiquer qu'il n'est plus actif.


 
En gros, à chaque modification, je donne un nouvel ID à l'éducateur et j'indique son ancien ID, puis je rends inactif son ancien enregistrement.
 
Le premier enregistrement qui a été fait pour un éducateur a un ancien_id = 0.
 
On a par exemple les enregistrements suivants :
1, 0, DUPONT, Jean, (données diverses),0
14, 1, DUPONT, Jean, (données diverses modifiées),0
23, 14, DUPONT, Jean, (données diverses modifiées),0
31, 23, DUPONT, Jean, (données diverses modifiées),1
 
Ma question :  
Comment remonter l'historique des modification avec SQL ?
Je pensais faire un LOOP, mais j'arrive pas trop à saisir si le comportement et la syntaxe. Et puis, il me faudrait mettre à chaque fois l'ancien ID dans une variable.
 
Y'aurait bien une solution avec une boucle côté PHP, mais ça risque d'être un peu lourd pour le serveur de base de données...
 
Merci pour votre aide  [:petrus75]

mood
Publicité
Posté le 05-07-2014 à 13:42:49  profilanswer
 

n°2232850
rufo
Pas me confondre avec Lycos!
Posté le 07-07-2014 à 11:10:50  profilanswer
 

C'est quand même pas top comme structure :/
J'aurais plutôt vu 2 tables :
L'une qui contient les données courantes, l'autre qui contient l'historique. Comme ça, t'as qu'un seul ID pour l'éducateur. Parce que je te dis pas le bazar si cet ID est utilisé comme clé étrangère dans d'autres tables et qu'il faille le changer pour mettre l'ID courant :/
 
Pour la table contenant l'historique, t'as le choix :
- soit elle a une structure similaire à celle contenant les données courantes, avec en plus, en clé étrangère, l'ID de l'éducateur. Facile pour récupérer l'historique mais grosse duplication de données identiques si très peu ont changé
- soit elle a une structure avec le nom du champ qui a changé (tu peux aussi le représenter par un enum ou une constante de type entier) et la valeur que le champ avait avant le changement + en clé étrangère, l'ID de l'éducateur. C'est un plus compliqué pour reconstituer l'historique mais t'as pas de duplication de donnée ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2232874
brutax
Posté le 07-07-2014 à 13:55:38  profilanswer
 

Ah ouais je vois.
 
Effectivement, y a un raté là-dessus.
Ton idée de faire une table historique est bonne. Il va me falloir un script pour récupérer l'existant et le déplacer dans la table qui va bien...
 
Merci pour ton aide.
 
Je reste ouvert à d'autres idées.

n°2232881
ddr555
Posté le 07-07-2014 à 15:11:45  profilanswer
 

je confirme que c'est comme ça qu'il faut faire. en rajoutant une date de mise à jour si besoin.

n°2232883
rufo
Pas me confondre avec Lycos!
Posté le 07-07-2014 à 15:32:39  profilanswer
 

Effectivement, j'ai oublié de préciser qu'il fait un champ date, voire un champ date/heure mais bon, quand on parle d'historique, ça implique une notion d'horodatage en général...


Message édité par rufo le 07-07-2014 à 15:32:55

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2232888
ddr555
Posté le 07-07-2014 à 15:37:19  profilanswer
 

oui pas habitué à MySQL, en oracle un champ date contient forcément la date et l'heure ;)

n°2232920
brutax
Posté le 07-07-2014 à 21:30:59  profilanswer
 

Okay.
 
Bon, je vais essayer de réorganiser mon bazar.
 
Merci à vous


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] LOOP

 

Sujets relatifs
MySQL : 1h pour une requête avec un NOT IN, conseils pour optimiser ?Recherche betatesteur pour logiciel d'optimisation PHP/MySQL
automatiser la synchronisation de 2 base de donnée mysql et oracleÉquivalent de mysql_num_rows en PDO
Location BDD mysqlExecuter un script si nouvelle ligne dans une table MySQL
LISTE DEROULANTE PHP MYSQLProblème in,sertion date mysql
problème avec les caractères spéciaux quote/addslashes insertion MySQL 
Plus de sujets relatifs à : [MySQL] LOOP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR