2013-11-14 95 views
0

我正在嘗試將Drupal遷移到WordPress,並且在用戶遷移和發佈所有權方面存在問題。如何執行此更新查詢?

更具體。

在我的WordPress安裝中,我已經從Drupal移動我的帖子。在傳輸的字段中也是節點ID。所以,現在我在WordPress中發佈的帖子與Drupal節點表中的ID相同。

此外,我已經遷移我的用戶,但我目前的問題是,如何將相應的用戶分配給WordPress中的相應帖子。

對於遷移我跟着this教程,在一些地方有這樣的代碼:

# Reassign post authorship. 
UPDATE 
    wordpress.wp_posts 
SET 
    post_author = NULL 
WHERE 
    post_author 
NOT IN 
    (
     SELECT 
      DISTINCT ID 
     FROM 
      wordpress.wp_users 
    ); 

可惜的是,這並不爲我工作,因爲我得到這個警告:

64 warning(s): 1048 Column 'post_author' cannot be null 

所以,我所做的是編寫以下查詢以檢索任何所需信息:

SELECT 
    DISTINCT(n.nid) AS `PostID`, 
    n.uid   AS `AuthorID`, 
    wu.ID   AS `WPUserID` 
FROM 
    drupal.node n 
LEFT JOIN 
    drupal.users u 
ON 
    n.uid = u.uid 
LEFT JOIN 
    wp_users wu 
ON 
    wu.user_login = u.name 
WHERE 
    wu.ID > 1 

上面的Query可以返回給我的帖子ID(與Drupal相關)和WordPress用戶ID,因爲WordPress中的用戶有一個新的ID。

所以問題是,我怎樣才能將此查詢與上面的UPDATE查詢混合,以便將相應的用戶設置爲適當的帖子?

只是爲了幫助

這是Drupal的用戶表簽名:

CREATE TABLE `users` (
    `uid` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(60) NOT NULL DEFAULT '''', 
    `pass` varchar(32) NOT NULL DEFAULT '''', 
    `mail` varchar(64) DEFAULT '''', 
    `mode` tinyint(4) NOT NULL DEFAULT ''0'', 
    `sort` tinyint(4) DEFAULT ''0'', 
    `threshold` tinyint(4) DEFAULT ''0'', 
    `theme` varchar(255) NOT NULL DEFAULT '''', 
    `signature` varchar(255) NOT NULL DEFAULT '''', 
    `signature_format` smallint(6) NOT NULL DEFAULT ''0'', 
    `created` int(11) NOT NULL DEFAULT ''0'', 
    `access` int(11) NOT NULL DEFAULT ''0'', 
    `login` int(11) NOT NULL DEFAULT ''0'', 
    `status` tinyint(4) NOT NULL DEFAULT ''0'', 
    `timezone` varchar(8) DEFAULT NULL, 
    `language` varchar(12) NOT NULL DEFAULT '''', 
    `picture` varchar(255) NOT NULL DEFAULT '''', 
    `init` varchar(64) DEFAULT '''', 
    `data` longtext, 
    `timezone_name` varchar(50) NOT NULL DEFAULT '''', 
    PRIMARY KEY (`uid`), 
    UNIQUE KEY `name` (`name`), 
    KEY `access` (`access`), 
    KEY `created` (`created`), 
    KEY `mail` (`mail`) 
) ENGINE=MyISAM AUTO_INCREMENT=397 DEFAULT CHARSET=utf8 

這是Drupal的節點表簽名:

CREATE TABLE `node` (
    `nid` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `vid` int(10) unsigned NOT NULL DEFAULT ''0'', 
    `type` varchar(32) NOT NULL DEFAULT '''', 
    `language` varchar(12) NOT NULL DEFAULT '''', 
    `title` varchar(255) NOT NULL DEFAULT '''', 
    `uid` int(11) NOT NULL DEFAULT ''0'', 
    `status` int(11) NOT NULL DEFAULT ''1'', 
    `created` int(11) NOT NULL DEFAULT ''0'', 
    `changed` int(11) NOT NULL DEFAULT ''0'', 
    `comment` int(11) NOT NULL DEFAULT ''0'', 
    `promote` int(11) NOT NULL DEFAULT ''0'', 
    `moderate` int(11) NOT NULL DEFAULT ''0'', 
    `sticky` int(11) NOT NULL DEFAULT ''0'', 
    `tnid` int(10) unsigned NOT NULL DEFAULT ''0'', 
    `translate` int(11) NOT NULL DEFAULT ''0'', 
    PRIMARY KEY (`nid`), 
    UNIQUE KEY `vid` (`vid`), 
    KEY `node_changed` (`changed`), 
    KEY `node_created` (`created`), 
    KEY `node_moderate` (`moderate`), 
    KEY `node_promote_status` (`promote`,`status`), 
    KEY `node_status_type` (`status`,`type`,`nid`), 
    KEY `node_title_type` (`title`,`type`(4)), 
    KEY `node_type` (`type`(4)), 
    KEY `uid` (`uid`), 
    KEY `tnid` (`tnid`), 
    KEY `translate` (`translate`) 
) ENGINE=MyISAM AUTO_INCREMENT=247 DEFAULT CHARSET=utf8 

這是WordPress的wp_posts表簽名:

CREATE TABLE `wp_posts` (
    `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `post_author` bigint(20) unsigned NOT NULL DEFAULT ''0'', 
    `post_date` datetime NOT NULL DEFAULT ''0000-00-00 00:00:00'', 
    `post_date_gmt` datetime NOT NULL DEFAULT ''0000-00-00 00:00:00'', 
    `post_content` longtext NOT NULL, 
    `post_title` text NOT NULL, 
    `post_excerpt` text NOT NULL, 
    `post_status` varchar(20) NOT NULL DEFAULT ''publish'', 
    `comment_status` varchar(20) NOT NULL DEFAULT ''open'', 
    `ping_status` varchar(20) NOT NULL DEFAULT ''open'', 
    `post_password` varchar(20) NOT NULL DEFAULT '''', 
    `post_name` varchar(200) NOT NULL DEFAULT '''', 
    `to_ping` text NOT NULL, 
    `pinged` text NOT NULL, 
    `post_modified` datetime NOT NULL DEFAULT ''0000-00-00 00:00:00'', 
    `post_modified_gmt` datetime NOT NULL DEFAULT ''0000-00-00 00:00:00'', 
    `post_content_filtered` longtext NOT NULL, 
    `post_parent` bigint(20) unsigned NOT NULL DEFAULT ''0'', 
    `guid` varchar(255) NOT NULL DEFAULT '''', 
    `menu_order` int(11) NOT NULL DEFAULT ''0'', 
    `post_type` varchar(20) NOT NULL DEFAULT ''post'', 
    `post_mime_type` varchar(100) NOT NULL DEFAULT '''', 
    `comment_count` bigint(20) NOT NULL DEFAULT ''0'', 
    PRIMARY KEY (`ID`), 
    KEY `post_name` (`post_name`), 
    KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), 
    KEY `post_parent` (`post_parent`), 
    KEY `post_author` (`post_author`) 
) ENGINE=InnoDB AUTO_INCREMENT=247 DEFAULT CHARSET=utf8 

最後,這是WordPress用戶表簽名:

CREATE TABLE `wp_users` (
    `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `user_login` varchar(60) NOT NULL DEFAULT '''', 
    `user_pass` varchar(64) NOT NULL DEFAULT '''', 
    `user_nicename` varchar(50) NOT NULL DEFAULT '''', 
    `user_email` varchar(100) NOT NULL DEFAULT '''', 
    `user_url` varchar(100) NOT NULL DEFAULT '''', 
    `user_registered` datetime NOT NULL DEFAULT ''0000-00-00 00:00:00'', 
    `user_activation_key` varchar(60) NOT NULL DEFAULT '''', 
    `user_status` int(11) NOT NULL DEFAULT ''0'', 
    `display_name` varchar(250) NOT NULL DEFAULT '''', 
    PRIMARY KEY (`ID`), 
    KEY `user_login_key` (`user_login`), 
    KEY `user_nicename` (`user_nicename`) 
) ENGINE=InnoDB AUTO_INCREMENT=652 DEFAULT CHARSET=utf8 
+0

UPDATE 個wordpress.wp_posts SET post_author = 0 WHERE post_author NOT IN ( SELECT DISTINCT ID FROM wordpress.wp_users ); – Hackerman

+0

這不會爲用戶分配任何用戶。我需要爲每個帖子分配一個作者。這對一個用戶來說很好,但我不想準確。 –

回答

1

在您更新查詢加入wp_postsnode表,並設置在節點表

UPDATE `wp_posts` p 
INNER JOIN `node` n (ON n.nid=p.ID) 
SET p.post_author = n.uid 

我的post_author字段作爲uidn.uid你一直保持這些ID相同wp_users ID

+1

聽起來不錯。 。 。 ! :)讓我檢查一下:) –

+1

非常感謝您的幫助。 :) –