2011-08-09 14 views
2

あるデータベースからテーブルを取得し、このデータを別のデータベースのテーブルに追加したいとします。ただし、コピーする前に更新する必要がある番号(IDを含む)は似ています。これを自動的に行う機能がありますか?または、その間にスクリプトを書く必要がありますか?別のデータベースの別のテーブルにmysqlテーブルを追加する方法

は、これまでのところ私が持っている:

#!/bin/sh 
mysqldump -uuser1 -ppw1 database1 table1 > /home/user/public_html/database1.sql --skip-add-drop-table --skip-create-options 
mysql -uuser2 -ppw2 database2 < /home/user/public_html/database1.sql 
rm /home/user/public_html/database1.sql 
+1

はどちらも同じサーバーに置かれていますか?あるテーブルから別のテーブルにデータを追加しようとしていますか? – ajreal

+0

はい、両方とも同じサーバーに座っています。そして、別のデータベース(同じサーバー)のあるテーブルから別のテーブルにデータを追加しようとしました。 – Ruben

答えて

1

は十分に簡単思われる、スクリプト経由で行うために多くの方が安全だろう何かのような音 - ちょうど最初のDBからデータを取得し、に一括挿入を実行しますもう1つは、mysqlがIDを処理するようにします。これは、任意の降下スクリプト言語で約10-30 LOCを取る必要があり、結果をより詳細に制御できます。

6

テーブルから選択して別のテーブルに挿入することができます。結果は元のデータに「追加」されます。

insert into new_table (id, name) select old_id, old_name from old_table; 

他のデータベースから表1つのデータベースから

insert into new_database.new_table (id, name) select old_id, old_name from old_database.old_table; 
+2

クエリでは、古いIDと新しいIDが競合しないとみなします。そうでない場合は、クエリからIDフィールドを削除するだけです。 –

+0

これは、両方のテーブルが同じデータベースにあると仮定していませんか? (実際のターゲットは、異なるデータベースから1つの新しいテーブルに新しいデータベースの多くのテーブルを取得することです) – Ruben

+1

new_database.new_table(id、name)に挿入old_id、old_nameをold_database.old_tableから選択します。 –

0

のテーブルを追加し、私はそれぞれの新しいデータベースの新しい接続を作成するPHPスクリプトを作成して、それを解決しました。このスクリプトは、メインテーブルを空にしてから、他のテーブルのデータを追加します。最初のエントリをNULLにして$ row [x]を1にすると、それが追加されることが確認されます。最適なソリューションかどうかはわかりませんが、動作します。

<?php 

$db_user = "database_all_usr"; 
$db_pw = ""; 
$db_database = "database_all_db"; 

mysql_connect("localhost", $db_user, $db_pw) or die(mysql_error()); 
mysql_select_db($db_database) or die(mysql_error()); 

$sql = "TRUNCATE TABLE table_all"; 
mysql_query($sql) or die(mysql_error()); 

copy_table("database1_db","database1_usr","",$db_database,$db_user,$db_pw); 
copy_table("database2_db","database2_usr","",$db_database,$db_user,$db_pw); 

function copy_table($db_current,$db_user_current,$db_pw_current,$db_host,$db_user_host,$db_pw_host){ 

    mysql_connect("localhost", $db_user_current, $db_pw_current) or die(mysql_error()); 
    mysql_select_db($db_current) or die(mysql_error()); 

    $sql = "SELECT * FROM table"; 

    $result = mysql_query($sql) or die(mysql_error()); 

    mysql_connect("localhost", $db_user_host, $db_pw_host) or die(mysql_error()); 
    mysql_select_db($db_host) or die(mysql_error()); 

    while ($row = mysql_fetch_row($result)) { 

     $sql = "INSERT INTO table_all VALUES (NULL, '$row[1]', '$row[2]')"; //adapt to the amount of columns 
     mysql_query($sql) or die(mysql_error()); 
    } 
} 
?> 
関連する問題