2013-06-19 74 views
0

我試圖創建一個單獨的搜索網站(使用database4site4)是從3個不同的網站各自有自己的數據庫每小時更新一次。我想將來自database1,database2和database3的數據合併到database4中。如何合併3分數據庫表形成3個不同的數據庫到數據庫中4

我也想在組合過程中刪除重複項,所以我被告知使用MySQL UNION函數。

在同一臺服務器我有4名具有自己的MySQL數據庫的每個網站單獨的網站:

站點1 - >數據庫1,1臺,16場

站點2 - > DATABASE2,1臺, 16個字段

site3 - >數據庫3,1臺,16個字段

site4 - > database4,1臺,16個字段(當前爲空)

所有4個數據庫具有相同的結構,其中每個數據庫只有1個包含16個字段的表。

在所有4個數據庫中,表名是相同的(Post_Data),並且所有16個字段是相同的。索引字段(字段11)被命名爲Post_Date。

隨着一些論壇的幫助,我能夠寫下面的PHP代碼,但它不起作用,我沒有得到錯誤。

你能看到下面的代碼有什麼問題,需要做些什麼來解決它?

在此先感謝。

<?php 

    // Website 1 
     $host1 = 'site1.com'; 
     $database1 = 'data_1'; 
     $username1 = 'user_1'; 
     $password1 = 'pass_1'; 
     $TableName1 = 'Post_Data'; 

    // Website 2 
     $host2 = 'site2.com'; 
     $database2 = 'data_2'; 
     $username2 = 'user_2'; 
     $password2 = 'pass_2'; 
     $TableName2 = 'Post_Data'; 

    // Website 3 
     $host3 = 'site3.com'; 
     $database3 = 'data_3'; 
     $username3 = 'user_3'; 
     $password3 = 'pass_3'; 
     $TableName3 = 'Post_Data'; 

    // Website 4 - Search Database 
     $host4 = 'site4.com'; 
     $database4 = 'data_4'; 
     $username4 = 'user_4'; 
     $password4 = 'pass_4'; 
     $TableName4 = 'Post_Data'; 

    // Connect to all 4 Databases 
     $connection1 = mysql_connect($host1, $username1, $password1) or die ('Cannot connect to the database because: ' . mysql_error()); 
     $connection2 = mysql_connect($host2, $username2, $password2, true) or die ('Cannot connect to the database because: ' . mysql_error()); 
     $connection3 = mysql_connect($host3, $username3, $password3, true) or die ('Cannot connect to the database because: ' . mysql_error()); 
     $connection4 = mysql_connect($host3, $username4, $password4, true) or die ('Cannot connect to the database because: ' . mysql_error()); 

    // Combine all 3 Databases into the Search Database #4 
     mysql_select_db ($database1,$connection1); 
     mysql_select_db ($database2,$connection2); 
     mysql_select_db ($database3,$connection3); 
     mysql_select_db ($database4,$connection4); 

     mysql_query("USE $database4"); 
     mysql_query("CREATE TABLE temp AS 
     SELECT * FROM $database1.$TableName1 
     UNION 
     SELECT * FROM $database2.$TableName2 
     UNION 
     SELECT * FROM $database3.$TableName3 
     "); 
     mysql_query("CREATE INDEX ix_post_date ON temp.Post_Date"); 
     mysql_query("RENAME TABLE Post_Data TO backup, temp TO Post_Data"); 

    // Close databases connections 
     mysql_close($connection1); 
     mysql_close($connection2); 
     mysql_close($connection3); 
     mysql_close($connection4); 

    // Finished 
     $date_time = date('m-d-Y H:i:s'); 
     echo '<h1>Finished - '.$date_time.'</h1>'; 

?> 

回答

0

您創建4個到數據庫的不同連接,但mysql_query將針對一個連接運行。

該查詢將需要知道要連接到哪個數據庫。你可以看到How do you connect to multiple MySQL databases on a single webpage?一個很好的例子

你應該能夠看到你創建表的查詢失敗時顯示錯誤:

// Check result 
// This shows the actual query sent to MySQL, and the error. Useful for debugging. 
if (!$result) { 
    $message = 'Invalid query: ' . mysql_error() . "\n"; 
    $message .= 'Whole query: ' . $query; 
    die($message); 
} 
+0

我加入了真正的參數數據庫的連接作爲鏈接說明你給了我並將檢查結果代碼添加到腳本中。該腳本仍然不起作用,並且檢查結果錯誤是:無效查詢:找不到文件:'./data_4/temp.frm'(errno:2)整個查詢: – Sammy