comparaison de tables en vue de faire un historique

comparaison de tables en vue de faire un historique - PHP - Programmation

Marsh Posté le 02-02-2006 à 09:57:36    

Salut à tous!  
 
Je voulais avoir votre avis sur la construction d'un historique, qui nécessite une comparaison de table.  
Novice en PHP, j'essaie d'avoir le raisonnement, mais c'est pas forcément évident. Si vous le voulez bien je vais vous soumettre une idée dans ce cas précis et j'aimerai recueillir vos avis et/ou vos conseils merci!  
 
voilà : j'ai trois tables dans ma base de données : une tp_edtion, une tp_historique et une tp_fdv. Tp_fdv et tp_edition possèdent une trentaine de champs en commun (on va réduire à 5 ici sinon on a pas fini!).  
 
le but est : si le contenu des champs en commun est différent alors inscrit dans une la table historique le champs différent issu de la table tp_fdv.  
 
bon j'essaye de taper les requetes correspondantes :  
 

Code :
  1. <?
  2. //connexion à la bdd je vous en fais grace...
  3. //je sélectionne dans les deux tables les champs en commun (à comparer)
  4. $requete=mysql_query('SELECT * FROM tp_edition') or die(mysql_error());
  5. $requete1=mysql_query('SELECT id, nom, prenom, age, adresse, pays FROM tp_fdv') or die(mysql_error());
  6. //je parcoure les deux array
  7. $donnees=mysql_fetch_array($requete);
  8. $donnees1=mysql_fetch_array($requete1);
  9. //si les noms sont différents (pour un même id : c'est ce qu'il faudrait mais alors là il y a un problème dans ma requete)
  10. if $donnees['nom']!=$donnees1['nom']
  11. {$requete2=mysql_query (INSERT INTO tp_historique (ID, nom, prenom, age, adresse, pays)VALUES ('', '$donnees1['id']', '$donnees1['nom']','$donnees1['prenom']', '$donnees1['age']', '$donnees1['adresse']' , '$donnees1['pays']' );
  12. }
  13. elseif $donnees['prenom']!=$donnees1['prenom']
  14. {$requete2=mysql_query (INSERT INTO tp_historique (ID, nom, prenom, age, adresse, pays)VALUES ('', '$donnees1['id']', '$donnees1['nom']','$donnees1['prenom']', '$donnees1['age']', '$donnees1['adresse']' , '$donnees1['pays']' );
  15. }
  16. elseif $donnees['age']!=$donnees1['age']
  17. {$requete2=mysql_query (INSERT INTO tp_historique (ID, nom, prenom, age, adresse, pays)VALUES ('', '$donnees1['id']', '$donnees1['nom']','$donnees1['prenom']', '$donnees1['age']', '$donnees1['adresse']' , '$donnees1['pays']' );
  18. }
  19. elseif $donnees['adresse']!=$donnees1['adresse']
  20. {$requete2=mysql_query (INSERT INTO tp_historique (ID, nom, prenom, age, adresse, pays)VALUES ('', '$donnees1['id']', '$donnees1['nom']','$donnees1['prenom']', '$donnees1['age']', '$donnees1['adresse']' , '$donnees1['pays']' );
  21. }
  22. elseif $donnees['pays']!=$donnees1['pays']
  23. {$requete2=mysql_query (INSERT INTO tp_historique (ID, nom, prenom, age, adresse, pays)VALUES ('', '$donnees1['id']', '$donnees1['nom']','$donnees1['prenom']', '$donnees1['age']', '$donnees1['adresse']' , '$donnees1['pays']' );
  24. }
  25. mysql_close;
  26. ?>


 
 
en gros voilà comment je vois les choses. Enfin le problème se pose alors :  
y'a un problème de comparaison, je pense.  
La logique doit m'échapper un peu...
il faudrait comparer les données id par id...mais des id y'en a 8000 dans mes tables!!  
 
vous voyez le problème?  
qu'en pensez-vous?  
 
merci du coup de main!!


Message édité par flock86 le 02-02-2006 à 09:58:10
Reply

Marsh Posté le 02-02-2006 à 09:57:36   

Reply

Marsh Posté le 02-02-2006 à 11:25:52    

Tu sais que tu peux demander directement à mysql de faire la comparaison pour toi?
ne seraisse qu'un "select table1.champ1,table2.champn from table1,table2 where table1.id=table2.id and table1.champ1<>table2.champn"
 
Et tu peux même améliorer ça en faisant faire l'insertion des données dans la table d'historique directement par mysql : requette de type "insert into ..... select ...".

Reply

Marsh Posté le 02-02-2006 à 11:41:40    

ouaaaah!!
ça c'est une bonne nouvelle!
bon la requete sql que tu as écrit ne me parait pas claire, mais c'est normal vu mon niveau...
mais c'est déjà une bonne nouvelle!
donc si je comprends :
table1.champ1 correspond au champ1 de la table1
table2.champn correspond au champn de la table 2
c'est le <> que yé né comprrends pas...
je vais me renseigner  
merci omega2!!

Reply

Marsh Posté le 02-02-2006 à 11:45:02    

"<>" = contenu différent
 
C'est comme si tu faisais un  
"not (table1.champ1 = table2.champn)"

Reply

Marsh Posté le 02-02-2006 à 12:33:20    

ok!!
merci!!
je vais essayer ça plus tard c la bourre en ce moment.
en tous les cas c'est une super piste
 
à plus!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed