2012-12-10 35 views
1

我有2個不同的服務器上的數據庫。源數據庫是一個龐大的房地產數據庫,第二個是一個WordPress數據庫。我必須將來源的數據導入到Wordpress數據庫的posts和postmeta表中。巨大的數據導入,Wordpress的PHP和MySQL

目前,我將所有東西都從源數據庫中取出,然後遍歷這些結果,將它們插入到帖子表中,使用另一個嵌套查詢將每個字段作爲使用插入後插入標識的元值插入。換句話說,這是一個記憶豬。

我的問題是,下面的循環可以改進,以便沒有這麼多的單獨插入行嗎?或者有沒有人有任何建議讓這個更快/而不是馬虎?

// SOURCE DB 
$query = "select $fields from listings where data_id = 'B'"; 

$result = mysql_query($query); 

// WORDPRESS DB 
while ($row = mysql_fetch_assoc($result)) { 
    $query2 = "insert into wp_posts (post_author, post_content, post_title, post_status, comment_status, ping_status, post_name, post_type) values"; 
    $query2 .= " ('1', '" . mysql_real_escape_string($row['remarks']) . "', '{$row['mls_acct']}', 'publish', 'closed', 'closed', '{$row['mls_acct']}', 'properties')"; 

    $result2 = mysql_query($query2); 

    $id = mysql_insert_id(); 

    foreach ($row as $key => $val) 
    { 
     $query3 = "insert into wp_postmeta (post_id, meta_key, meta_value) values "; 

     $query3 .= "('$id', '$key', 'mysql_real_escape_string($val)')"; 

     $result3 = mysql_query($query3); 
    } 
} 
+1

將一個命令行mysqldump(+如果需要搜索和替換表名稱)並重新導入到wordpress數據庫不是訣竅? – wkoot

+0

如果您有PHPMyAdmin,您還可以導出所有表並將其導回到您需要的任何數據庫。 – maiorano84

回答

0

我想到的第一個想法就是分批插入記錄,而不是每次插入一個記錄。所以,你的內插件將結束是這樣的:

insert into wp_postmeta (post_id, meta_key, meta_value) values 
(1, meta_key_1, meta_value_1), 
(1, meta_key_2, meta_value_2), 
(1, meta_key_3, meta_value_3), 
(1, meta_key_4, meta_value_4), 
(1, meta_key_5, meta_value_5), 
(1, meta_key_6, meta_value_6), 
(1, meta_key_7, meta_value_7), 
... 
(1, meta_key_100, meta_value_100); 

我不知道什麼是每批次記錄的最佳數量,但我覺得你的想法。

0

你也許可以做一個INSERT ... SELECT FROM ...作爲一個單一的查詢,而不是你的環形版本在網絡內部做:

INSERT INTO wp_postmeta (post_id, meta_key, meta_value) 
    SELECT $id, meta_key, meta_value FROM wp_posts WHERE id = $id 

我不是特別熟悉WP的內部(我真的真的不要永遠不想變得如此......),但是如果你可以調整這個工作,你可以在循環中爲自己節省幾十個單獨的插入查詢。

+0

一旦你掌握了它們的內容,WP的內部特徵就相當漂亮了:) – KalenGi

相關問題