MySQL查询有助于在表之间移动数据

时间:2012-12-05 03:34:03

标签: mysql sql forum phpbb3 bbpress

我使用内置导入程序在bbpress中通过phpbb3论坛导入。来自bbpress的所有匿名用户都没有帐户,但被允许发布的帖子与帖子断开连接,一切都在bbpress中显示为匿名。我从post_usernames抓取了所有phpbb_posts并使用此查询创建了用户:

INSERT INTO wp_users (user_login)
    SELECT DISTINCT post_username 
    FROM phpbb_posts

现在我正在尝试在3个不同的表之间进行查询。这些方面的东西:

SELECT ID FROM wp_users 
INSERT INTO wp_posts(post_author)
WHERE wp_posts(post_date) = phpbb_posts(post_time)
  AND phpbb_posts(post_username) = wp_users(user_login)

显然这不对......可能是语法错误,但我还需要添加一些告诉MySQL的方法user_login必须从第一行附加到ID。希望这是有道理的。在此先感谢您的帮助!

更新了查询:

SELECT ID FROM wp_users

SELECT post_time FROM phpbb_posts = post_date
SELECT post_username FROM phpbb_posts = user_login

希望这种语法更有意义。这些确实有效,他们选择了正确的信息。问题是我不知道如何正确编写WHERE语句,就像你说的baskint,我想我需要以某种方式使最后一个语句成为子查询。再次感谢!

2 个答案:

答案 0 :(得分:1)

我仍然不确定每个表的PK(主键)和FK(外键)关系是什么。但是,假设wp_users是主要表格而phpbb_posts.post_usernamewp_users.user_login的FK ...:

SELECT `wp_users`.`ID` 
FROM `wp_users` INNER JOIN
(SELECT `phpbb_posts`.`post_username` FROM `phpbb_posts`, `wp_posts` WHERE `phpbb_posts`.`post_time` = `wp_posts`.`post_date` ) AS `posts`
ON `wp_users`.`user_login` = `posts`.`post_username`;

EDIT(Dec-05-2012): 在chatting之后并且经过具体的讨论,@ sbroways必须在某些字段和其他一些修改上更改数据类型。反过来,最终的查询结果是:

SELECT wp_users.*, ws_posts.*
FROM wp_users INNER JOIN ws_posts
ON wp_users.user_login = ws_posts.user_login

答案 1 :(得分:0)

你是对的。你的语法混乱而且不正确。试图了解你想要完成的事情。在第二个查询中,为什么要同时选择和插入?也许我错过了一些东西,但是你能说出你想从哪些表中提取出来的内容以及你希望用简单的英语看到结果吗?

你也可以考虑子查询(SELECT * FROM b WHERE id IS IN(来自a的SELECT Id)。你可以将它级联几次,也许可以得到答案。