-
sincronia tabelle mysql
Salve a tutti,
ho la necessità di tenere aggiornata una tabella in base ai valori di un'altra tabella residente su un server diverso.
La mia idea è questa:
1) leggo i dati (ad esempio id, nome, cognome) dalla prima tabella e li salvo in un array.
2) leggo i dati dalla seconda tabella e li salvo in un secondo array.
3) per ogni id del primo array verifico che questo esista nel secondo, se esiste verifico che gli altri campi corrispondano (nome e cognome) aggiornandoli in caso di esito negativo, altrimenti se non esiste l'id, lo creo.
4) scrivo le modifiche effettuate sulla seconda tabella.
Qualcuno ha un'idea su come implementare la cosa in maniera efficace ed efficiente?
In particolare come effettaure il confronto fra array, e come tenere traccia delle modifiche.
Grazie.
-
Prova a fare qualcosa del genere:
Codice PHP:
<?php
error_reporting(E_ALL);
$db = mysql_connect('localhost', 'user', ''); // connesione
mysql_select_db('database', $db);
$q = mysql_query('SELECT * FROM tab1', $db); // prima query
$t1 = array(); // dati tabella 1
$t2 = array(); // dati tabella 2
while($r = mysql_fetch_assoc($q)) { // tabella1
$t1[$r['id']] = $r;
}
mysql_free_result($q);
$q = mysql_query('SELECT * FROM tab2', $db); // seconda query
while($r = mysql_fetch_assoc($q)) { // tabella 2
$t2[$r['id']] = $r;
}
mysql_free_result($q);
foreach($t1 as $r) {
if(array_key_exists($r['id'], $t2)) { // se l'id esiste nel secondo array
if($t1['name'] != $t2['name']) { // controllo i dati e se non corrispondono, aggiorno il record
mysql_query("UPDATE tab2 SET name = '{$t1['name']}' WHERE id = {$t2['id']} LIMIT 1", $db);
}
} else { // se non esiste l'id, lo creo
mysql_query("INSERT INTO tab2 (id, name) VALUES ({$t1['id']}, '{$t1['name']}'", $db);
}
}
mysql_close($db);
?>
Non ho avuto modo di provarlo ma credo che questo sia il procedimento giusto!
-
In effetti avevo pensato una cosa molto simile.
Grazie per l'aiuto, al più presto faccio delle prove e vi aggiorno.
Ancora grazie.
-
Stavo preparandomi a testare il codice ma mi è sorto un dubbio.
In questo pezzo di codice
Codice PHP:
foreach($t1 as $r) {
if(array_key_exists($r['id'], $t2)) { // se l'id esiste nel secondo array
if($t1['name'] != $t2['name']) { // controllo i dati e se non corrispondono, aggiorno il record
mysql_query("UPDATE tab2 SET name = '{$t1['name']}' WHERE id = {$t2['id']} LIMIT 1", $db);
}
} else { // se non esiste l'id, lo creo
mysql_query("INSERT INTO tab2 (id, name) VALUES ({$t1['id']}, '{$t1['name']}'", $db);
}
}
mentre sto ciclando t1, il confronto su cosa lo faccio?
Codice PHP:
if($t1['name'] != $t2['name']) {
o meglio su quale 'name' di t2?
non sarebbe può corretto qualcosa del genere?
Codice PHP:
if($r['name'] != $t2[r['id']]['name']) {
non l'ho ancora provato e non sono sicuro della correttezza della sintassi, mi interessa di più la logica...
-
Si mi devi scusare :P!
Ovviamente la chiave degli elementi degli array è l'id estratto, quindi come hai fatto tu è corretto.