>I'm sorry, I thought that what I was asking was very simple.  but everyone 
>wants to make it more
>difficult then it actually is. 

No, you just hadn't quite explained what you needed properly.

There were simply too many undefined points in your email for a reasonable
answer to be given.

If you really want to ignore the experts and do it your way, here's a crude
sample script that should be pretty close to what you think you want:

<?php
  # Untested code written on the fly:
  $stage = mysql_connect('stage.example.com', 'stageuser', 'stagepass') or
die('Could not connect to stage database');
  mysql_select_db('stage', $stage) or die('Could not select stage
database');
  
  $production = mysql_connect('production.example.com', 'productionuser',
'productionpass') or die('Could not connect to production database');
  mysql_select_db('production', $production) or die('Could not select
production database');
  
  # Update production data to "archived" status:
  $query = "update sometable set archived = 1";
  mysql_query($query, $production) or die("Could not update production
database to 'archived'");
  
  # Find out which IDs already exist in 'production'
  $query = "select whatever_id from sometable";
  $archived = mysql_query($query, $production) or die("Could not obtain
production IDs");
  $archived_ids = array();
  while (list($id) = mysql_fetch_row($archived)){
    $archived_ids[] = $id;
  }
  
  # Snag any staged content that is not yet archived (ie, on production):
  $archived_ids_sql = implode(', ', $archived_ids;
  $query = "select whatever_id, whatever_columns from sometable where
whatever_id in ($archived_ids_sql)";
  $newbies = mysql_query($query, $stage) or die("Could not obtain stage
data");
  
  # Copy all those rows to 'production'
  while (list($whatever_id, $whatever_columns) = mysql_fetch_row($newbies)){
    $query = "insert into whatever(whatever_id, whatever_columns) ";
    $query = "values($whatever_id, '$whatever_columns') ";
    mysql_query($query, $production) or die("Could not insert $whatever_id
into production");
  }
?>

NOTES:
You could put this on 'stage' or 'production' server and run it from a cron
job, or on demand from some other script, or just by loading it into a
browser.

You'll need to configure MySQL on the machine where this script is *not*
living to accept connections from the "other" machine.  In other words,
assuming you put this on 'stage', and you expect the script to be able to
mysql_connect('production.example.com' ..., you will need to configure MySQL
on 'production.example.com' to accept connections from 'stage.example.com' 
I think MySQL out of the box will only accept connections from 'localhost'
(ie, the same machine as it's on)

You could gain a little (or maybe a lot...) of performance by using MySQL's
multiple-insert syntax instead of doing a different insert query for every
single new row in 'stage'.  However, multiple-insert syntax will not be
portable to most other SQL engines, I don't think.


You can either repeat the above technique for as many tables as you need,
*OR* if you have a zillion tables, you could use
http://php.net/mysql-list-tables to get all the tables in the database
(either one) and then http://php.net/mysql-list-fields to figure out what
tables/fields are in each database and build your queries dynamically.



WARNING:
This is probably not the right way to do what you want to do.  I'm only
answering your question, no matter how wrong that question might be :-)  The
experts have already told you that, and you don't seem to want to listen,
though, so I figure you might as well try it your way and see what happens.

You might some day find it easier to re-think your design, however, and
time-stamp the records that can be "archived" and then always just use
mysqldump to move stage -> production.

You would then add an extra table/field to your schema that tracked when the
previous 'move' occurred, and any records 'older' than that would be
'archived' records, not 'current'

Using mysqldump and a time-stamp will "scale up" *MUCH* better if the number
of records/tables/fields increases dramatically...

The above script is very, very crude and will *NOT* do well when zillions of
records are added to stage at once.

If you don't expect the numbers to ever become large, just do whichever one
makes you happy :-)

But if you are thinking this database might grow large, doing it the way
above is insane.

YMMV

-- 
Like Music?  http://l-i-e.com/artists.htm


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to