我正在研究一系列SQL(MySQL)查詢,以將站點從Drupal 6遷移到WordPress(當前爲4.5.3)。我在我的筆記本電腦上運行本地主機上的所有查詢(所以它只是將數據從一個數據庫移動到另一個數據庫),所以此時性能不是問題。SQL將作者/故事關係從Drupal遷移到WordPress
我無法遷移作者節點和故事節點之間的關係。在Drupal中,它的工作原理如下:
- 有一篇文章節點。爲此目的,這不是習慣。這些有5萬多個。
- 作者有一種自定義內容類型(因爲很多作者實際上不是Drupal用戶,也因爲它允許我們爲作者頁面提供更多自定義顯示)。有〜2000這些。
- 有一個
content_field_op_author
表,其中包含以下列:vid(對於修訂版),nid(對於文章節點)和field_op_author_nid(對於作者節點)。
我嘗試運行此查詢,瞭解有多少雙有:
SELECT COUNT(*) FROM content_field_op_author GROUP BY nid;
這導致了57898行(這似乎真實的我)。
在WordPress中,設置是這樣的:
- wp_posts具有標準帖子內容類型。所有文章都已成功導入,並且主ID與Drupal中的節點行相匹配。
- 來賓作者有一個自定義文章類型(由插件運行)。所有〜2000都已成功導入,並且主ID也與Drupal中的節點行匹配。
- 每位訪客作者也存在一行
wp_terms
和wp_term_taxonomy
。我創建了一個名爲user_node_id_old
的專欄,用於保留用戶帖子ID的節點ID。我不確定這是否有必要,但確實存在。
我一直無法使用一些不同的查詢嘗試在wp_term_relationships
中創建正確的行。
查詢我已經試過:
INSERT IGNORE INTO `wordpress`.wp_term_relationships(object_id, term_taxonomy_id)
SELECT nid as object_id, tax.term_taxonomy_id as term_taxonomy_id
FROM `drupal`.content_field_op_author author
INNER JOIN `wordpress`.wp_terms t ON t.user_node_id_old = author.field_op_author_nid
INNER JOIN `wordpress`.wp_term_taxonomy tax ON t.term_id = tax.term_id
INNER JOIN `wordpress`.wp_posts p ON author.nid = p.Id
WHERE field_op_author_nid IS NOT NULL
GROUP BY object_id
;
這導致52754行被添加到wp_term_relationships
這似乎是一個奇怪的差距縮小到了我。
我跑這個查詢試圖找到在我的Drupal數據庫中的行而不是在WordPress:
SELECT DISTINCT `wordpress`.p.ID as wordpress_post_id, `wordpress`.t.name as wordpress_author_name, n.nid as drupal_id, au.title as drupal_author_name
FROM `wordpress`.wp_posts p
INNER JOIN `wordpress`.wp_term_relationships r ON r.object_id = p.ID
INNER JOIN `wordpress`.wp_term_taxonomy tax ON tax.term_taxonomy_id = r.term_taxonomy_id
INNER JOIN `wordpress`.wp_terms t ON t.term_id = tax.term_id
LEFT OUTER JOIN `drupal`.node n ON p.ID = n.nid
LEFT OUTER JOIN `drupal`.content_field_op_author a ON n.nid = a.nid
LEFT OUTER JOIN `drupal`.node au ON a.field_op_author_nid = au.nid
WHERE tax.taxonomy = 'author'
AND `wordpress`.t.name != au.title
;
這導致333行。
我想這其中還有:
INSERT IGNORE INTO `wordpress`.wp_term_relationships(object_id, term_taxonomy_id, user_node_id_old)
SELECT nid as object_id, 0 as term_taxonomy_id, field_op_author_nid as user_node_id_old
FROM `drupal`.content_field_op_author
WHERE field_op_author_nid IS NOT NULL
GROUP BY CONCAT(nid, field_op_author_nid)
;
這導致331行。我認爲這個查詢對於實際遷移的內容要準確得多,但它仍然沒有得到我認爲我需要的數字匹配。它也似乎與總行數的差異無關。