2013-12-18 13 views
0

我有一個XML文件,現在它已被插入到MySQL數據庫,但有一個XML文件中的問題,這意味着一些數據可能會從網站刪除,所以我更新了xml文件,並且我編寫了用於從數據庫表中刪除數據的代碼,該數據庫表從xml中刪除,但記錄仍在數據庫中。如何從mysql數據庫中刪除行中找不到的XML文件

從另一種方式我想比較XML文件和數據庫,並刪除數據找不到。

<?php 

    ini_set('display_errors','On'); 
    //connecting to database. 
    echo "connected to DB<br /><br />"; 


    $url = "test.xml"; 
    $xmlfgc = file_get_contents($url); 
    $xmlitem = new SimpleXMLElement($xmlfgc); 
    echo "xml loaded<br /><br />"; 

    foreach ($xmlitem->property as $xml) { 
     //$id   = mysql_real_escape_string($xml->id);    
     $mls_id  = mysql_real_escape_string($xml->ref);   

     //echo "$mls_id"; 
     echo "xml parsed<br /><br />";    

     $result = mysql_query("SELECT mls_id FROM ezrealty"); 


     //$select = "SELECT mls_id FROM ezrealty"; 
     //$storeArray = Array(); 
     //while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
     //  $storeArray[] = $row['mls_id']; 
     //} 

     if ($result != $mls_id){  
      $query = "DELETE FROM ezrealty WHERE mls_id = '$mls_id'"; 
      mysql_query($query) or die(mysql_error()); 
      echo "DataBase deleted<br /><br />"; 
    }else{       
      echo "There is no deleted properties from xml file.";   
     }     
    } 

     //show updated records 
     echo "<br /><br />"; 
     printf ("Records updated: %d\n", mysql_affected_rows()); 

    //close connection 
    mysql_close($con2); 

?> 
+0

你的xml文件是怎樣的?你可以從中發佈樣本嗎? – peterm

+1

我這樣一種情況,我會加載新的XML文件到一個臨時表,然後做一個基於您現有的表和新表之間的左外部連接的DELETE – Kickstart

回答

0

謝謝你,現在我有我的問題的解決方案。

<?php 

    ini_set('display_errors','On'); 
    //connecting to database. 
    echo "connected to DB<br /><br />"; 


    $url = "test.xml"; 
    $xmlfgc = file_get_contents($url); 
    $xmlitem = new SimpleXMLElement($xmlfgc); 
    echo "xml loaded<br /><br />"; 

    $xmldata = array(); 
    foreach ($xmlitem->property as $xml) {    

     $mls_id  = mysql_real_escape_string($xml->ref);     

     // $xmldata[] = "$mls_id"; 
     $xmldata[] = '("' . $mls_id. '")';  
    } 

    //Get all reference numbers from database in array  
    $result = mysql_query("SELECT mls_id FROM gitfd_ezrealty"); 
    $storeArray = Array(); 
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
      $storeArray[] = $row['mls_id']; 
    } 

    //get difference between two arrays.  
    $result1 = array_diff($xmldata, $storeArray); 
    foreach ($result1 as $value) { 
     //echo "<strong>$value</strong> <br />"; 
     //$value1 = '("' . $value. '")'; 
     //$query = 'INSERT INTO gitfd_ezrealty (mls_id) 
     //VALUES' . implode(',', $value1);  
     //mysql_query($query) or die(mysql_error()); 

     //echo "inserted into mysql<br /><br />"; 
    } 
    echo "These properties are founded in target site and Not founded in our site.<br />"; 
    echo "________________________________________________________________"."<br />"; 
    print_r($result1); 
    echo "<br />"."_____________________________________________________________________"."<br />"; 


    $result2 = array_diff($storeArray, $xmldata); 
    foreach ($result2 as $value) { 
      //echo "<strong>$value</strong> <br />"; 
      $query = "DELETE FROM ezrealty WHERE mls_id = '$value'"; 
      mysql_query($query) or die(mysql_error()); 
      echo "DataBase deleted<br /><br />"; 
    }  
    echo "_________________________________________________________________"."<br />"; 
    print_r($result2); 
    echo "<br />"."______________________________________________________________________"."<br />"; 
    echo "These properties were deleted .<br />"; 

     //show updated records 
     echo "<br /><br />"; 
     printf ("Records updated: %d\n", mysql_affected_rows()); 

    //close connection 
    mysql_close($con2); 

?> 
相關問題