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

  FORUM HardWare.fr
  Programmation
  PHP

  comparaison de tables en vue de faire un historique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comparaison de tables en vue de faire un historique

n°1297181
flock86
oh non les gars pas le slip!
Posté le 02-02-2006 à 09:57:36  profilanswer
 

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
mood
Publicité
Posté le 02-02-2006 à 09:57:36  profilanswer
 

n°1297241
omega2
Posté le 02-02-2006 à 11:25:52  profilanswer
 

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 ...".

n°1297251
flock86
oh non les gars pas le slip!
Posté le 02-02-2006 à 11:41:40  profilanswer
 

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!!

n°1297254
omega2
Posté le 02-02-2006 à 11:45:02  profilanswer
 

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

n°1297295
flock86
oh non les gars pas le slip!
Posté le 02-02-2006 à 12:33:20  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  comparaison de tables en vue de faire un historique

 

Sujets relatifs
[SQL Server] Listes des tables d'une baseRequêtes avec mysql sur 2 tables
recherche d'index absents d'une liste de tables définie[C#] Comparaison de chaîne impossible en C# ???
requete sur deux tables à optimiserCommande UNIX - Comparaison
[MySQL] Sélection d'un même champs dans plusieurs tablesJSF:créer dynamiquement des tables sans connaitre leur nombre
comparaison de dates en msdos[SQL/PHP] Selectionner toute les tables d'une base
Plus de sujets relatifs à : comparaison de tables en vue de faire un historique


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