Try something along the lines of this:
$cid = mysql_connect($host,$usr,$pwd);
if (!$cid) { echo("ERROR: " . mysql_error() . "\n"); }
$todays_date = mktime();
$month_ago = $todays_date - 2592000; // subtract 30 days
$SQL = " SELECT * FROM news ";
$SQL = $SQL . " WHERE date < '$todays_date' ";
$retid = mysql_db_query($db, $SQL, $cid);
if (!$retid) { echo( mysql_error()); }
else {
while ($row = mysql_fetch_array($retid)) {
$id = $row["id"];
$other_field1 = $row["other_field1"]; // Grab all info in the row
$other_field2 = $row["other_field2"];
// Move to archive table
$SQL = " INSERT INTO archive ";
$SQL = $SQL . " (other_field1, other_field2) VALUES ";
$SQL = SQL . " ('$other_field1', '$other_field2') ";
$move_to_archive = mysql_db_query($db, $SQL, $cid);
// Delete from news table
$SQL = " DELETE FROM news WHERE id = $id";
$delete_from_news = mysql_db_query($db, $SQL, $cid);
There might be errors in that, I wrote it quickly on the fly. But the idea is, select everything in the database that is a month old, then insert it into an archive table, and delete it from the news table.