特定の日付でデータベースをあるデータベースから別のデータベースにコピーする最良の方法は何ですか?
フローは次のとおりです。ユーザーは私のプログラム (PHP 言語) で何らかのアクションを実行し、ファイルを取得します。次に、データベースがコピーされるように、そのファイルを他のプログラムにアップロードする必要があります。
構造は常に同じなので、コピーされるのは構造のないデータだけです。
ここでの例は、データの構造です
呼び出されるソース表old
id | date | value_1 | value_2 | value 3
1 | 2012-06-02 | some_data | some_data | some_data
2 | 2012-06-03 | some_data | some_data | some_data
3 | 2012-06-03 | some_data | some_data | some_data
次に、ユーザーは のデータのみをダウンロードして、2012-06-03
という名前の新しいテーブルに移動したいと考えていますnew
。の結果は次のnew
ようになります。
id | date | value_1 | value_2 | value 3
2 | 2012-06-03 | some_data | some_data | some_data
3 | 2012-06-03 | some_data | some_data | some_data
ノート:
[*]The program will be need smart enough to understand, if the `id` already in the `new` database then do `update` if not do `insert`.
[*]The table is located on different database. e.g: `db_source.old` copied to `db_target.new`
それを行うための最良のロジックは何ですか?または、この種のタスクを処理するクラスがすでにいくつかありますか?
これは大学の課題ではなく、プログラムに追加したい実際のプロジェクトの実装であることを理解してください。そして、私がここで尋ねているのは質問ではありませんget the code
。手がかりを教えてください。調査させていただきます。
すでにデータを出力するスクリプトをいくつか作成しています。
データ収集スクリプトを実行する一部のスニペット
/**
* Get all database data and output it in array format
* @return array
*/
function output(){
$return = array();
foreach($this->getAllTableName() as $table_name){
$this->load->model($table_name.'_model');
$class_name = $table_name.'_model';
$model = new $class_name;
$return[$table_name] = array();
$this->db->where('created >=', $this->date_start);
$this->db->where('created <=', $this->date_end);
foreach((array)$model->get() as $object){
$return[$table_name][$object->id] = $this->wrap_value($object);
}
}
return $return;
}
出力:
update
しかし、どのデータが必要であるかを理解するために、SQL ファイルと混同されます。insert