php - 如何执行这个更新查询?

标签 php mysql wordpress drupal drupal-7

我正在尝试将 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

上述查询可以向我返回帖子 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

最佳答案

在更新查询中,加入 wp_postsnode 表,并将 post_author 字段设置为节点表

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

我猜n.uid您维护的这些ID与wp_users ids中的相同

关于php - 如何执行这个更新查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19984559/

相关文章:

javascript - Wordpress Gutenberg 媒体上传视频库

php - 使用 PHP Curl 登录到远程 SSL 站点失败

php - www 和 https 的 htaccess 重定向问题

php - 第二种情况在 PHP switch 语句中未触发

php - 创建 mysql 查询的正确方法

php - 如何在不重复 wordpress 自定义帖子的情况下循环进入两个不同的 DIVS

javascript - Bootstrap-combobox 值未在 PHP 中发布

php - 直接 MySQL 查询或缓存文件 - 哪个更快?

MySQL - 在一列上使用 MAX() 并从该行的其余部分返回数据?

php - wordpress 中 the_post_thumbnail 和 get_the_post_thumbnail 的区别