Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem php rss reader do mysql

Ahoj,

v následujícím kódu čtu rss zdroje z tabulky, přes funkci fetch_rss je načtu a v následující smyčce foreach je naházím do druhej tabulky. Problém je v tom, že takhle se mi do tabulky uloží kompletní výpis ze zdrojů, bez ohledu na to, jestli už v tabulce jsou. Potřeboval bych tímhle skriptem rss zdroje projít a do tabulky přidat jen nové zdroje.

Šlo by to nějak? Napadá mě akorát získat posledni timestamp z tabulky a pak přidat jen ty články, co mají timestamp novější. Jako že by se v tej smyčce while zjistilo z tabulky timestamp a pak se v tom INSERT INTO dala podmínka jen pro novější timestamp.Neví někdo jak na to? Za každý nakopnutí děkuji :)

Bublifuk

<?

include("db_connect.php");

require_once('rss_fetch.inc');

$query = Mysql_Query("SELECT id, url_syndicate, language FROM sources ORDER BY id")or Die(MySQL_Error());

	While ($data = MySQL_Fetch_Array($query))

		{

			$rss = fetch_rss( $data["url_syndicate"] );

			$language=$data["language"];
			$sourceid=$data["id"];

			foreach ($rss->items as $item )

				{

					$language=$data["language"];
					$sourceid=$data["id"];
					$title=addslashes($item['title']);
					$link=$item['link'];
					$pubdate=$item['pubdate'];
					$author=addslashes($item['author']);
					$summary=addslashes($item['summary']);
					$timestamp=$item['date_timestamp'];

					MySQL_Query("INSERT INTO `syndicate` (`id`, `source_id`, `author`, `header`,`body`, `url`, `date`, `timestamp`, `language`) VALUES ('', '$sourceid', '$author', '$title', '$summary', '$link', '$pubdate', '$timestamp', '$language')")or Die(MySQL_Error());

				};

		};

?>
Předmět Autor Datum
Tak jak navrhuješ by to šlo. Před While si dáš SELECT MAX(timestamp) FROM syndicate a přiřadíš jej…
host 24.11.2009 19:19
host
díky. INSERT jsem radši řešil IFem, aby se vůbec nevolal když není potřeba. jenže ten SELECT MAX mi…
bublifuk 24.11.2009 19:31
bublifuk
Chybí ti tam MySQL_Fetch_Array. Nemůžeš hned do $max_timestamp přiřadit SQL dotaz.
host 24.11.2009 19:41
host
jojo, máš pravdu :i:, dík poslední
bublifuk 24.11.2009 19:56
bublifuk

Tak jak navrhuješ by to šlo.

Před While si dáš SELECT MAX(timestamp) FROM syndicate a přiřadíš jej do nějaké proměnné (třeba $max_timestamp).
A u INSERTu přidáš podmínku ...WHERE timestamp>=$max_timestamp

Každopádně bys měl mít ošetřený nějaký unikátní klíč (to ID), aby nemohly být v tabulce dva stejné záznamy...

díky.

INSERT jsem radši řešil IFem, aby se vůbec nevolal když není potřeba. jenže ten SELECT MAX mi nevrací maximální hodnotu co je ve sloupci, ale Resource id #10

<?

include("db_connect.php");

require_once('rss_fetch.inc');

$query = Mysql_Query("SELECT id, url_syndicate, language FROM sources ORDER BY id")or Die(MySQL_Error());

	$max_timestamp=Mysql_Query("SELECT MAX(timestamp) FROM syndicate");

	While ($data = MySQL_Fetch_Array($query))

		{

			$rss = fetch_rss( $data["url_syndicate"] );

			$language=$data["language"];
			$sourceid=$data["id"];

			foreach ($rss->items as $item )

				{

					$language=$data["language"];
					$sourceid=$data["id"];
					$title=addslashes($item['title']);
					$link=$item['link'];
					$pubdate=$item['pubdate'];
					$author=addslashes($item['author']);
					$summary=addslashes($item['summary']);
					$timestamp=$item['date_timestamp'];

					if($timestamp >= $max_timestamp) {MySQL_Query("INSERT INTO `syndicate` (`id`, `source_id`, `author`, `header`,`body`, `url`, `date`, `timestamp`, `language`) VALUES ('', '$sourceid', '$author', '$title', '$summary', '$link', '$pubdate', '$timestamp', '$language')")or Die(MySQL_Error());};

				};

		};

?>

Zpět do poradny Odpovědět na původní otázku Nahoru