Visualizzazione risultati 1 fino 5 di 5

Discussione: sincronia tabelle mysql

  1. #1
    Guest

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

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    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!

  3. #3
    Guest

    Predefinito

    In effetti avevo pensato una cosa molto simile.
    Grazie per l'aiuto, al più presto faccio delle prove e vi aggiorno.

    Ancora grazie.

  4. #4
    Guest

    Predefinito

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

  5. #5
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Si mi devi scusare :P!
    Ovviamente la chiave degli elementi degli array è l'id estratto, quindi come hai fatto tu è corretto.

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •