【问题标题】:How to link one row to a row on another table?如何将一行链接到另一张表上的一行?
【发布时间】:2016-06-02 19:14:02
【问题描述】:

我的情况有点奇怪,我无法更改数据库结构,所以请不要提及。

我有两个名为 users 和 forum_users 的表。 'users' 表有两行:user_id(主)、用户名。 'forum_users' 表有三行:id(主)、forum_user_id、forum_username。

假设我们有一个 user_id 为“23”的用户。此用户已自动添加到 forum_users 表,其 id 为“1”,forum_user_id 为“23”,以及一个随机的 forum_username。 我想要完成的是,我希望 'forum_username' 数据更新为 'user_id' 等于 'forum_user_id' 的条目的 'username' 数据。

我该如何实现呢?这可以仅通过 MySQL 完成而不使用任何类型的外部脚本吗?如果没有,那我该如何制作这样的脚本?

示例数据库:http://pastebin.com/ZYf8baV3

这是我需要的快速画图: Drawing

【问题讨论】:

  • 请用示例数据和预期结果展示您试图解释的内容。我无法理解您要描述的内容。
  • 我没有被问到,我只是在做一个没有什么不寻常要求的项目。这不是一个论坛,我只是用那个名字作为占位符。
  • 所以您希望用户表中的用户名在 forum_users 表中的用户名更新时更新?
  • 每当有新条目添加到 forum_users 表时,我希望 forum_users 表中的 forum_username 更新为 users 表中的用户名。
  • 我敢打赌,@HikJ 想将 phpBB 论坛上的数据复制到另一个数据库中。这就是为什么他不能改变结构。为什么不编辑在用户名更改时调用的 phpBB 函数,以便在两个表上进行编辑?

标签: mysql sql database


【解决方案1】:

听起来你想要一个触发器

MySQL 触发器是与表关联的数据库对象。当对表执行定义的操作时,它将被激活。当您在表上运行以下 MySQL 语句之一时,可以执行触发器:INSERT、UPDATE 和 DELETE。它可以在事件之前或之后调用。

使用您提供的数据的快速示例:

CREATE TRIGGER CasscadeUsername_after_update
AFTER UPDATE
ON Users FOR EACH ROW

BEGIN

UPDATE forum_users
SET forum_username = username
WHERE forum_users.user_id = users.user_id

END

这里是教程链接trigger-syntax

【讨论】:

【解决方案2】:

用forum_user对应的用户名更新用户的所有记录,试试下面的代码

 update user a
    set username = (select forum_user_name  from forum_user b 
where b.forum_user_id=a.user_id);

要仅更新单个记录,例如 23,请使用以下更新语句

update user a
set username = (select forum_user_name  from forum_user b
 where b.forum_user_id=23)
where user_id=23;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多