2013-11-14 2 views
0

Я пытаюсь мигрировать Drupal в WordPress, и у меня есть проблема с миграцией пользователей и правами на публикацию.Как выполнить этот запрос обновления?

Подробнее.

В моей установке WordPress я перемещаю свои сообщения из Drupal. Среди перенесенных полей также есть идентификатор узла. Итак, теперь мои сообщения в WordPress имеют те же идентификаторы, что и в таблице узлов Drupal.

Также я переношу своих пользователей, но моя текущая проблема заключается в том, как назначить соответствующего пользователя соответствующему сообщению в 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 
    ); 

Unfortunatelly это не работает для меня, потому что я получаю это предупреждение:

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 

Вышеуказанный запрос может вернуть мне идентификатор сообщения (что относится к Drupal one) и идентификатор пользователя WordPress, так как пользователь в WordPress имеет новый идентификатор.

Итак, вопрос в том, как я могу смешивать этот запрос с запросом 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 ГДЕ post_author НЕ В ( ВЫБОР DISTINCT ID ОТ wordpress.wp_users ); – Hackerman

+0

Это не назначает никому пользователей сообщений. Мне нужно назначить автора для каждого сообщения.Это хорошо для одного пользователя, но я не буду точным. –

ответ

1

В запросе обновления присоединиться wp_posts и node таблицу и установите post_author поле как uid в таблице узлов

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

I Угадайте n.uid, вы сохранили эти идентификаторы такими же, как в wp_users ids

+1

Звучит неплохо. , , ! :) Позвольте мне проверить это :) –

+1

Большое спасибо за вашу помощь. :) –

Смежные вопросы