[php/mysql]Comparaison

bonsoir tout le monde!

je dois faire une comparaison entre 2 bases de données pour un petit "logiciel" de synchronisation.

Donc je me connecte sur le "serveur", je recupère le contenu de la base de données distante, et pour chaque ligne récupérée, je vérifie si sur la base locale si ca existe ou pas

la 2 solutions:
si ca existe pas : je fais un INSERT
si ca existe je verifie si il y a des modifications et je met a jour en conséquence.

mon problème est plus lié sur mon 2ème cas. En effet, l’idéal serait de se baser sur un certain nombre de critère qui serait un gage suffisant pour dire si l enregistrement est celui que l’on doit comparer entre les 2 bases ou pas (certains champs sont beaucoup approprié a des modification que d’autres)

Ainsi, dans ma logique si par exemple si par exemple, 5 des 10 champs sont identiques entre 2 enregistrements, on peut effectivement faire le UPDATE des modifications car l’enregistrement en question est bien le bon dans les 2 bases

Au dela de 5 champs non identique, on peut considérer que l’enregistrement n’est pas le même; et donc soit il faut aller chercher un autre enregistrement, soit il n’existe pas et donc il faudra un INSERT.

Maintenant mon problème est vraiment lié a cette comparaison.
Comment peut on simuler ce système de critères de manière "relativement" simple?

il y aurait la méthode brute qui me ferait récupérer les éléments de base de données distante, je les mets en varaible, je prends les éléments de la base de données locale, que je mets aussi en varaible et je compare le tout

mais n y a t il pas une solution possible directement dans la requète?
la de toute façon j’ai deja mis en variable les resultats de la base de données distance. Maintenant est il possible d’utiliser ces resultats en les utilisant dans la requete sur la base de données locale et de me sortir un nombre m’indiquant le nombre de similitude exacte?(ce qui m’évitera de refaire la requete sur la base de données locale et de tout ressortir en variable et de comparer ce magma!)

j espère que j ai été assez clair!

merci d’avance!
Florent

Heuu, c’est peut-être être bête ce que je vais dire, mais je me lance quand même:

Pourquoi, dans tes bases, ne pas ajouter une colonne Date/time contenant la date et l’heure de dernière modification?

Ainsi, tu as juste à comparer ces deux dates/heures au lieu de comparer 1 par 1 les champs de tes bases.

Bien entendu, faut veuillez à ce que toute modificaton entraine une mise à jour de la date et de l’heure…

C’est peut-être complètement à coté de la plaque, mais peut-être pas!

Bon courage! :hello:

Pourquoi pas une clef unique sur tes champs, et avec derrière une requête INSERT OR REPLACE? (voir doc du driver)

Je sais pas si ça correspond à tes besoins, mais bref.

je vous remercie pour vos reponses

gaadek> ta proposition facilitera les mises a jour, par contre j aurais toujours le meme problème: es ce que l enregistrement considéré est bien le même sur les 2 bases!

sans-nom > j ai deja une clé de type auto incrément unique. Le problème c que je ne peux l’utiliser, en effet sur l’une et l’autre base il peut tres bien exister une clé 2 (ou 1) mais des enregistrements complètement différents!

en effet, si je commence a ajouter des enregistrements sur la base B, puis je synchronise sur la base A (sachant que la base A est plus ancienne), j aurais en resultat les enregitrsments de la base B + ceux de A (a la suite)