【问题标题】:MySQL query help moving data between tablesMySQL 查询帮助在表之间移动数据
【发布时间】:2012-12-05 03:34:02
【问题描述】:

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

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 一样,我想我需要以某种方式使最后一个语句成为子查询。再次感谢!

【问题讨论】:

  • 能否请您发布您的表格结构?
  • 天啊是的。谢谢您的帮助。这是 3 个表结构的屏幕截图。 linklinklink
  • 我假设wp_users.IDwp_posts.IDphpbb_post.post_id 的外键?
  • 如果我正确理解外键... wp_users.IDwp_posts.ID 的外键,但未链接到 phpbb_posts.post_idphpbb_posts.post_id 没有与进口商一起进入wp_posts,所以我认为它没有同步到任何东西。谢谢!
  • 所以...phpbb_posts.post_id 是空的吗?

标签: mysql sql forum phpbb3 bbpress


【解决方案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`;

编辑(2012 年 12 月 5 日): 在chatting 之后,@sbroways 不得不更改某些字段的数据类型和一些其他修改。反过来,最终的查询结果是:

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

【讨论】:

  • 现在试试这个。有 75k 个帖子和 13k 个用户,所以可能需要一分钟。感谢您的帮助!
  • @sbroways 我将不得不编辑我的答案,因为连接属于不同的数据类型。但在此之前,假设wp_users.ID 'sbroways' 在phpbb_postswp_posts 上有一个帖子...对于我所读到的内容,phpbb_posts 将有正确的 ID(在本例中,'sbroways')位于php_post.post_username?为了在wp_posts 中找到相同的帖子,匹配将是phpbb_posts.post_time = wp_posts.post_date?
  • @sbroways 我还注意到(在您的表结构的屏幕截图上)wp_users.IDwp_posts.post_author 共享相同的数据类型值。这反过来又让我相信wp_posts.post_authorwp_users 的PK (wp_users.ID) 的实际FK。我对么? Ej.:SELECT wp_users.ID FROM wp_users, wp_posts WHERE wp_users.ID = wp_posts.post_author
  • 感谢您的帮助!我已经为此工作了好几天!问题是wp_users.ID 是一个整数。而phpbb_posts 只有一个字符串post_username。我已将所有phpbb_posts.post_usernames 导入wp_users,因此它们现在都有整数ID:wp_users.ID,并且它们的字符串都为wp_users.user_loginwp_posts 使用来自 wp_users 的 ID 将用户名附加到每个帖子。因此,我需要将所有这些用户 ID 附加到 wp_posts 内的正确帖子中。
  • 为了做到这一点,我认为,我需要使用与wp_postsphpbb_posts 匹配的时间戳,因为帖子ID 都搞砸了,彼此不匹配。因此,一旦我将wp_posts.post_date 的时间戳与phpbb_posts.post_time 的时间戳相匹配,我就需要在phpbb_posts 中查看该记录并找到post_username - 获取该用户名并将其与@ 匹配987654356@ - 从wp_users 中的记录中获取ID,并将其一直带回wp_posts.post_author。天哪,我希望这是有道理的。
【解决方案2】:

你是对的。您的语法令人困惑且不正确。试图了解您要完成的工作。在第二个查询中,为什么要同时选择和插入?也许我遗漏了一些东西,但您能否说明您要从哪些表格中提取什么内容以及您希望如何以简单的英语查看结果?

您还可以考虑子查询(SELECT * FROM b WHERE id IS IN (SELECT Id from a)。您可以级联几次,也许会得到答案。

【讨论】:

  • 是的,很抱歉造成混淆。用简单的英语:我正在尝试将 wp_users 中的用户 ID 附加到 wp_posts 中的相应帖子,为此我需要将 wp_posts 中每个帖子的时间戳与 phpbb_posts 中每个帖子的时间戳进行比较,因为 phpbb_posts每个帖子都附有正确的用户名。然后,我需要从 phpbb_posts 中获取该字符串,并将其与来自 wp_users 的 user_login 字符串进行比较,以确保它们匹配,然后再获取 ID 并将其分配给 wp_posts 中的每个帖子。我知道这很混乱!我不认为它听起来那么糟糕,但很难解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2011-11-07
  • 2011-07-19
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多