Comment identifies-tu tes tuples ?
Comment identifies-tu tes tuples ?
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
Je pensais parcourir tout les champs d'une base et les comparait avec l'autre base
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
En ce cas, tu ne détecteras pas les mises à jour qui ont été effectuées sur les tuples.
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
that's it's a problem...
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Je veux dire : si tu n'identifies pas la clef primaire et que tu compares le tuple entier, jamais tu ne repèreras les modifications. Tout tuple ayant été modifié sera repéré comme nouvel enregistrement...
Si, en revanche, tu peux identifier la clef primaire (c'est ce que j'ai fait dans le script dont je t'ai parlé, par exemple), alors tu compareras les tuples en utilisant cet identifiant et ce sera du gâteau.
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
bah si les tuples ont une clé primaire identique dans les deux bases, sauf si c'est un tuple qui a été ajouté...Envoyé par Kirkis
il faut que je synchronise la structure et les données je m'en sors pas là...
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
est-ce que le début est bon ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 <?php //compare les deux bases et renvoye une chaine contenant le dump de la base synchronisée function synchronisation($base,$base_compare){ $liste_tables_base = mysql_list_tables($base); $liste_tables_base_compare = mysql_list_tables($base_compare); //traitement des tables if(mysql_num_rows($liste_tables_base) != mysql_num_rows($liste_tables_base_compare)){ //si il n'y a pas le meme nombre de tables dans les deux bases je parcours la liste des tables et fait les mises a jour dans $base en n'oubliant pas de vérifier les champs } else{ //si il y en a le meme nombre je parcours les listes et vérifie que ce sont les memes for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){ for($j=0;$j<mysql_num_rows($liste_tables_base_compare);$j++){ if(mysql_tablename($liste_tables_base, $i) == mysql_tablename($liste_tables_base_compare , $j)){ //si ce sont les memes je vérifie le nombre de colonne de chaque table //si c'est le meme nombre je vérifie que ce sont les memes //si c'est pas le meem nombre je parcours les deux listes et fait les mises à jour dans $base } else{ //si c'est pas les memes je fais les mises à jour dans $base } } } } } ?>
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Comment puis je récupérer le nombre de champs d'une table ainsi que leur noms sachant que je connais le nom de la table ?
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $result = mysql_query("SHOW COLUMNS FROM tatable"); //récupération du nom des champs while($row = mysql_fetch_array($result)) { $champ[] = $row['Field']; } //récupération nombre count($champ);
Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés
merci....
j'avance petit a petit mais j'avance...
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Un petit apercu, hésitez pas à la compléter ou donner votre avis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 <?php //compare les deux bases et renvoye une chaine contenant le dump de la base synchronisée function synchronisation($base,$base_compare){ $liste_tables_base = mysql_list_tables($base); $liste_tables_base_compare = mysql_list_tables($base_compare); //traitement des structure de tables if(mysql_num_rows($liste_tables_base) != mysql_num_rows($liste_tables_base_compare)){ //TODO si il n'y a pas le meme nombre de tables dans les deux bases je parcours la liste des tables et fait les mises a jour dans $base en n'oubliant pas de vérifier les champs } else{ //si il y en a le meme nombre je parcours les listes et vérifie que ce sont les memes noms de tables for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){ for($j=0;$j<mysql_num_rows($liste_tables_base_compare);$j++){ if(mysql_tablename($liste_tables_base, $i) == mysql_tablename($liste_tables_base_compare , $j)){ //si ce sont les memes je vérifie le nombre de champs de chaque table //récupération du nom des champs $result_base = mysql_query('SHOW COLUMNS FROM '.mysql_tablename($liste_tables_base, $i) while($row = mysql_fetch_array($result_base)) { $champ_base[] = $row['Field']; } $result_base_compare = mysql_query('SHOW COLUMNS FROM '.mysql_tablename($liste_tables_base_compare, $j) while($row = mysql_fetch_array($result_base_compare)) { $champ_base_compare[] = $row['Field']; } if(count($champ_base) == count($champ_base_compare)){ //si c'est le meme nombre je vérifie que ce sont les memes champs for($k=0;$k<count($champ_base);$k++){ for($l=0;$l<count($champ_base_compare);$l++){ if($champ[$k] != $champ[$l]){ //TODO les noms des champs sont différents donc je mets à jour $base } } } } else{ //TODO si c'est pas le meem nombre de champs je parcours les deux listes et fait les mises à jour dans $base } } else{ //TODO si c'est pas les memes noms de tables je fais les mises à jour dans $base } } } } //traitement des données des tables } ?>
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
allez c'est lundi, on s'y remet de bonne heure et de bonne humeur
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Salut
Tu sais, il y a moyen de déterminer quels champs sont clef primaire d'une table, si tant est qu'il y ait une clef primaire. Dans le script dont je t'ai parlé plus haut, je me suis creusé la tête à déterminer quelle est la clef primaire même lorsqu'elle n'est pas définie.
Sans cette clef, je t'assure que tu vas rapidement avoir des incohérences.
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
J'ai deeja répondu a ta qustion, j'ai une clef primaire a chaque table
pour l'instant je me bats avec la synchronisation de la structure...
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Je voudrais vérifier que l'élément de la premiere liste est dans la deuxieme, si non je l'ajoute a la base si oui je passe au second élément de la premiere liste.
avec ce que j'ai fait j'ai un probleme je parcour toutes ma deuxieme liste avaant d'incrementer la premier donc evidemment a un moment je rentre dans le if et souleve une erreur car j'essaye d'ajouter une table qui existe déjà.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 for($i=0;$i<mysql_num_rows($liste_tables_base_compare);$i++){ for($j=0;$j<mysql_num_rows($liste_tables_base);$j++){ echo '<br> Table de base_compare : '.mysql_tablename($liste_tables_base_compare, $i); echo '<br> Table de base : '.mysql_tablename($liste_tables_base , $j); if(mysql_tablename($liste_tables_base_compare, $i) != mysql_tablename($liste_tables_base , $j)){ echo '<br>differentes<br>'; $create= mysql_query("SHOW CREATE TABLE ".mysql_tablename($liste_tables_base_compare, $i)) or die('ERREUR : '.mysql_error()); $tableau = mysql_fetch_array($create); $tableau[1] .= ";"; mysql_selectdb($base);//selectionne la base mysql_query($tableau[1]) or die('ERREUR 2 : '.mysql_error()); } } }
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Probleme résolu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 liste_tables_base = mysql_list_tables($base); $liste_tables_base_compare = mysql_list_tables($base_compare); //traitement des structure de tables if(mysql_num_rows($liste_tables_base) != mysql_num_rows($liste_tables_base_compare)){ //si il n'y a pas le meme nombre de tables dans les deux bases je parcours la liste des tables et fait les mises a jour dans $base for($i=0;$i<mysql_num_rows($liste_tables_base_compare);$i++){ $egale = false; for($j=0;$j<mysql_num_rows($liste_tables_base);$j++){ if(mysql_tablename($liste_tables_base_compare, $i) == mysql_tablename($liste_tables_base , $j)){ $egale = true; break; } } if($egale == false){ mysql_selectdb($base_compare);//selectionne la base $create= mysql_query("SHOW CREATE TABLE ".mysql_tablename($liste_tables_base_compare, $i)) or die('<br>ERREUR : '.mysql_error()); $tableau = mysql_fetch_array($create); $tableau[1] .= ";"; mysql_selectdb($base);//selectionne la base mysql_query($tableau[1]) or die('<br>ERREUR 2 : '.mysql_error()); } }
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Ah tiens, je t'avais mal compris ici :
J'avais compris "au cas où" et non "puisque"... Je suis parfois très borné :/Envoyé par schlough
Si je puis me permettre un conseil : appelle mysql_num_rows() avant chaque boucles et enregistre chaque valeur dans une variable, car tu demandes actuellement à PHP de retrouver chaque valeur à chaque fois. Ce n'est pas très coûteux en temps d'exécution mais bon...
J'imagine qu'il ne te reste plus qu'à parcourir les tuples de chaque base et, à chacun d'eux, de comparer son existence dans l'une et l'autre table en utilisant la clef.
Bonne chance pour déterminer si un tuple a été mis à jour et nécessite une modification...
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
Voila j'ai un peu optimisé la fonction synchronisation.php faut que je la continue maintenant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 <?php //compare les deux bases et renvoye une chaine contenant le dump de la base synchronisée //on choisit si on veut synchronisé la structure et si on veut synchroniser les données function synchronisation($base,$base_compare, $donnees = false,$structure = false){ $liste_tables_base = mysql_list_tables($base); $liste_tables_base_compare = mysql_list_tables($base_compare); if($structure == true){ //traitement des structure de tables //je prends l'élément de la premiere base et je regarde si il est dans la deuxième for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){ $egale = false; for($j=0;$j<mysql_num_rows($liste_tables_base_compare);$j++){ if(mysql_tablename($liste_tables_base, $i) == mysql_tablename($liste_tables_base_compare, $j)){ $egale = true; break; } } if($egale == false){ //la table n'existe pas dans les deux bases, je la crée donc dans $base_compare mysql_selectdb($base);//selectionne la base $create= mysql_query("SHOW CREATE TABLE ".mysql_tablename($liste_tables_base, $i)) or die('<br>ERREUR : '.mysql_error()); $tableau = mysql_fetch_array($create); $tableau[1] .= ";"; mysql_selectdb($base_compare);//selectionne la base mysql_query($tableau[1]) or die('<br>ERREUR 2 : '.mysql_error()); } else{ //la table existe dans les deux bases, je vérifie si elle a la meme structure } } } if($structure == true){ //traitement des données de tables } } ?>
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Pour l'instant je suis toujours dans les structures, il faut que quand une table existe dans les deux bases je vérifie si elle a la meme structure, je pense voir bien optimisé la non, qu'en penses tu ?Envoyé par Kirkis
Je veux faire un truc qui tourne nickel sur les structures et apres je m'attaquerais aux données, mais je veux vraiment faire quelque chose de bien fait et réutilisable facilement.
Le contenu est roi, optimisé il est empereur...
Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.
http://www.tethis-interactive.com
Perso, j'aurais plutôt adopté un truc genre :
[/list:u:139dc044fd][*]parcours des tables de la BDD2
- parcours des tables de la BDD1
[list:139dc044fd]- recherche du nom de la table dans la BDD2
[list:139dc044fd]- si inexistant : créer puis insérer les données
- si existant : comparer la structure puis les tuples dans les 2 BDD
[/list:u:139dc044fd]
- comparer les tuples de la table dans les 2 BDD (les structures de tables sont déjà synchronisées)
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager