Używam następującego kodu php do ładowania danych z pliku xml do wstawienia w Mysql, chcę aktualizować ten kanał rss za każdym razem, gdy pojawiają się nowe artykuły na tej stronie.

<?php
mysql_connect("localhost","root","");
mysql_select_db("rss") ;

$feeds = array('http://mywebsite.com/index.php?format=feed&type=rss');
foreach( $feeds as $feed ) {
$xml = simplexml_load_file($feed);

foreach($xml->channel->item as $item)
{
$date_format = "j-n-Y"; // 7-7-2008




 echo '<style type="text/css">.style1 { direction: rtl;</style><p class="style1">';
 echo $item->pubDate;  
 echo '<br><a href="'.$item->link.'" target="_blank">'.$item->title.'</a><br>';
 echo '<div>' . $item->description . '</div><br><br><br><hr><br>';
 echo '<div>' . $item->content . '</div><br><br><br>';             
 echo '</p>';




mysql_query("INSERT INTO rss_feeds (id, title, description, link, category, pubdate,  facebook_pub, website) 
VALUES (
    '', 
    '".mysql_real_escape_string($item->title)."', 
    '".mysql_real_escape_string($item->description=htmlspecialchars(trim($item->description)))."', 
    '".mysql_real_escape_string($item->link)."', 
    '".mysql_real_escape_string($item->category)."', 
    '".mysql_real_escape_string($item->pubDate)."',
    'No', 
    'almourassel.com')");    
    }
    }
    ?>

Jednak po załadowaniu tego skryptu ponownie wstawia on poprzednio dodane dane. Jak mogę po prostu zaktualizować nowe artykuły.

Myślę, że skrypt powinien dodawać nowe elementy, dopóki nie spełni ostatniego dodanego elementu w tabeli, porównując Pubdate.

-1
Nizar Barkallah 30 sierpień 2012, 06:19

2 odpowiedzi

Najlepsza odpowiedź

Możesz także napisać dwa różne zapytania, jedno do usunięcia istniejących danych z tabel, a następnie trafić na zapytanie wstawiające. lub możesz użyć polecenia replace w komendzie mysql. robiłem to wcześniej w bardzo prosty sposób, patrz:

mysql_query("DELETE FROM `wp_property`") or die(mysql_error());   
echo "Old data deleted !: <br /><br />";
$xmls = simplexml_load_file('my_file_location.xml');
foreach($xmls->Property as $xml)
{
$ID = $xml->ID;  
$ManagementCompanyID = $xml->ManagementCompanyID;
$MarketingName = $xml->MarketingName;
}

$sql = "INSERT INTO `wp_property` SET`ID`='".mysql_real_escape_string(trim($ID))."',   `ManagementCompanyID`='".mysql_real_escape_string(trim($ManagementCompanyID))."', `MarketingName`='".mysql_real_escape_string(trim($MarketingName))."'";

if (!mysql_query($sql))
{
die('Error: ' . mysql_error());
}

}
echo "New Records added successfully ! <br /><br />";

Mam nadzieję, że ci to pomoże. szczęśliwego kodowania!

1
Gaurav 30 sierpień 2012, 15:27

Najłatwiej to zrobić, używając polecenia MySQL replace into

REPLACE INTO table_name(column_name1,column_name2,…) VALUES(value1,value2,…)

Instrukcja MySQL REPLACE jest rozszerzeniem MySQL do standardu SQL. MySQL REPLACE działa jak instrukcja INSERT z następującymi regułami:

  • Jeśli wstawiany rekord nie istnieje, MySQL REPLACE wstawi nowy rekord.
  • Jeśli wstawiany rekord istnieje, MySQL REPLACE najpierw usunie stary rekord, a następnie wstawi nowy rekord z nowymi wartościami.

Zasadniczo wszystko, co musisz zrobić, to zamienić INSERT INTO na REPLACE INTO w instrukcji SQL.

Jeśli jednak masz auto-increment primary keys, na przykład replace into może nie być dobrym pomysłem, ponieważ usuwa i wstawia rekordy, nowe identyfikatory PK zostaną utworzone dla tych samych rekordów, co spowoduje problemy z ograniczeniami FK..

Inną opcją jest użycie INSERT ... ON DUPLICATE KEY UPDATE, która ponownie sprawdzi duplikaty w unikalnych polach kluczy. Jeśli możesz mieć pewność, że data publikacji będzie unikalna dla każdego artykułu, ta składnia może zostać użyta zamiast replace into

Możesz też wybrać tradycyjną trasę, na której wykonujesz select from table where db_pubdate = rss_pubdate, a jeśli nie ma pasujących rekordów, wykonujesz insert into table

2
raidenace 30 sierpień 2012, 18:45