-1

次のphpコードを使用して、xmlファイルからデータをロードしてMysqlに挿入しています。このウェブサイトに新しい記事が掲載されるたびに、このrssフィードを更新したいと思います。

<?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')");    
    }
    }
    ?>

ただし、このスクリプトをロードすると、以前に追加されたデータが再挿入されます。新しい記事を更新するにはどうすればよいですか。

スクリプトは、Pubdateを比較して、テーブルのlasadded要素に一致するまで新しいアイテムを追加する必要があると思います。

4

2 に答える 2

2

これを行う最も簡単な方法は、MySQLreplace intoコマンドを使用することです

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

MySQL REPLACEステートメントは、SQL標準に対するMySQL拡張機能です。MySQL REPLACEは、次のルールを持つINSERTステートメントのように機能します。

  • 挿入するレコードが存在しない場合、MySQLREPLACEは新しいレコードを挿入します。
  • 挿入するレコードが存在する場合、MySQL REPLACEは最初に古いレコードを削除してから、新しい値を持つ新しいレコードを挿入します。

基本的に、あなたがしなければならないのは、SQLステートメントで置換INSERT INTOすることだけです。REPLACE INTO

ただしauto-increment primary keys、たとえば、replace intoレコードを削除および挿入するため、同じレコードに対して新しいPK IDが作成され、FK制約の問題が発生するため、これはお勧めできません。

別のオプションは、INSERT ... ON DUPLICATE KEY UPDATEこれを使用して、一意のキーフィールドの重複を再度チェックすることです。pubdateが記事ごとに一意であることが確実な場合は、代わりにこの構文を使用できます。replace into

または、従来のルートを使用して、select from table where db_pubdate = rss_pubdate一致するレコードがない場合は、insert into table

于 2012-08-30T02:26:11.603 に答える
1

2つの異なるクエリを作成することもできます。1つはテーブルの既存のデータを削除してから、挿入クエリを実行するためのものです。または、mysqlのreplaceintoコマンドを使用できます。私は以前に非常に簡単な方法でそれを行いました。以下を参照してください。

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 />";

それがあなたを助けることを願っています。ハッピーコーディング!

于 2012-08-30T11:27:36.310 に答える