Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/04/2011, 02:54
Avatar de zibor
zibor
 
Fecha de Ingreso: diciembre-2006
Mensajes: 80
Antigüedad: 17 años, 4 meses
Puntos: 1
Pregunta Comparación entre registros de un BD

Buenas.
Tengo dos BD mysql identicas, en la que se supone que una esta en LOCAL y la otra en otro lugar...

Una opción que barajé fue la de exportar los datos e importarlos a la otra BD o borrar e insertar de nuevo todos los datos, pero esas opciones estan bien si tenemos pocos DATOS, si hablamos de mucha inormación, ese proceso puede ser lento...

Mi intención es un sincronizado entre las dos BD sobre una tabla, para ello comparo los "id" y la fecha de actualización intentando que me muestre las tuplas a actualizar,borrar y nuevos.

A ver si alguien me puede ayudar en el planteamiento pues no salgo del mio y es incorrecto...

Código PHP:
<?php
/* 
 * Script para sincronizar los Datos en LOCAL con una conexion guardada de una BD en internet o en LOCAL
 * MYSQL
 */

//conexion a la BD local
include("../../nucleo/config/BD/conexionBD.php");

//Datos de otra BD para sincronizar.
$urls $_POST["url"];
$BDs $_POST["BD"];
$usuarios $_POST["usuario"];
$claves $_POST["clave"];
$error 0;


if(
$linkSincro mysql_connect($urls,$usuarios,$claves)){
    if(
mysql_select_db($BDs$linkSincro)){
        
$sql "SELECT * FROM tDocumentos";
        
$resultSincro mysql_query($sql,$linkSincro);
        
$numResult mysql_num_rows($resultSincro);
        
$link abrirBD();

        
//copiar todos los datos de la BD local al nuevo servidor o actualiza.

        //Copio los Documentos
        
if($numResult == 0){
            
//selecciono los documentos en local para guardar todos en otro servidor.
            
if($result mysql_query($sql,$link)){
                while (
$row mysql_fetch_array($result)) {
                    
//funcion mysql_real_escape_string(): Escapa caracteres especiales en una cadena para ser usado en una sentencia SQL
                    
$textarea mysql_real_escape_string($row["contenido"],$link);
                    
$sqlInsert "INSERT INTO tDocumentos VALUES('".$row["id"]."','".$row["titulo"]."','".$textarea."','".$row["privacidad"]."','".$row["fecha"]."','".$row["actualizacion"]."')";
                    if(!(
mysql_query($sqlInsert,$linkSincro))){
                        
errorBD($linkSincro);
                        
$error++;
                    }
                }

                
$sql "SELECT * FROM tEtiquetas";
                if(
$result mysql_query($sql,$link)){
                    while (
$row mysql_fetch_array($result)) {
                        
$sqlInsert "INSERT INTO tEtiquetas VALUES('".$row["id"]."','".$row["nombre"]."')";
                        if(!(
mysql_query($sqlInsert,$linkSincro))){
                            
errorBD($linkSincro);
                            
$error++;
                        }
                    }
                }else{
                    
errorBD($link);
                    
$error++;
                }

                
$sql "SELECT * FROM DocuEti";
                if(
$result mysql_query($sql,$link)){
                    while (
$row mysql_fetch_array($result)) {
                        
$sqlInsert "INSERT INTO DocuEti VALUES('".$row["idDocu"]."','".$row["idEti"]."')";
                        if(!(
mysql_query($sqlInsert,$linkSincro))){
                            
errorBD($linkSincro);
                            
$error++;
                        }
                    }
                }
            }else{
                
errorBD($link);
                
$error++;
            }
        }else if(
$numResult 0){
            
//actualizar los registro adecuados...


            
if($result mysql_query($sql,$link)){
                
//datos local
                
while($row mysql_fetch_array($result)){
                   
$arrLocalId[] .= $row["id"];
                   
$arrLocalAct[] .= $row["actualizacion"];
                }
                
//datos otro DB
                
while ($row mysql_fetch_array($resultSincro)) {
                   
$arrSincrId[] .= $row["id"];
                   
$arrSincrAct[] .= $row["actualizacion"];
                }
            }else{
                
errorBD($link);
                
$error++;
            }
            
$numSincro count($arrSincrId);
            
$numLocal count($arrLocalId);

            for(
$i=0;$i<$numLocal;$i++){
                
$cn=0;
                
$cl=0;
                for(
$j=0;$j<$numSincro;$j++){
                    if(
$arrLocalId[$i] == $arrSincrId[$j] && $arrLocalAct[$i] > $arrSincrAct[$j]){
                        
$actualizar[] .= $arrLocalId[$i];
                    }else if(
$arrLocalId[$i] != $arrSincrId[$j] && $cn <= $numSincro){
                        if(
$cn == $numSincro){
                            
$nuevo[] .= $arrLocalId[$i];
                        }
                        
$cn++;
                    }else if(
$arrLocalId[$i] != $arrSincrId[$j] && $cl <= $numLocal){
                        if(
$cl == $numLocal){
                            
$borrar[] .= $arrLocalId[$i];
                        }
                        
$cl++;
                    }
                }
            }
            echo 
"act: <br>";
            
print_r($actualizar);
            echo 
"<hr>nuev: <br>";
            
print_r($nuevo);
            echo 
"<hr>borr: <br>";
            
print_r($borrar);
            
        }

        
cerrarBD($link);
        
cerrarBD($linkSincro);

        if(
$error == 0){
            echo 
"<img title='Sincronización correcta' src='css/iconos/ok.png'/>";
        }else{
            echo 
"<img title='num errores: ".$error."' src='css/iconos/error.png'/>";
        }

    }else{
        echo 
"<img title='Imposible conectar' src='css/iconos/error.png'/>";
    }
}else{
    echo 
"<img title='Imposible conectar' src='css/iconos/error.png'/>";
}


?>

Saludos y gracias.
__________________
Picando código...!!!