【问题标题】:Mysql triggers passing data from one table to another matching tablesMysql 触发将数据从一个表传递到另一个匹配的表
【发布时间】:2017-10-16 19:15:51
【问题描述】:

我有 table1 的列(id、firstname、lastname)和 table2 的列(id、firstname、lastname、ans3、task、matchid)。到目前为止,我已经制作了将名字和姓氏从 table1 插入到 table2 的触发器。现在我想要的是将 table2 中的 matchid 与 table1 中的 id 连接起来。例如,当 matchid = 1 时,显示 table1 中 id = 1 的记录,并且 table2 记录在同一行中。到目前为止,这是我对触发器所做的事情。

DELIMITER //

CREATE TRIGGER after_user_insert AFTER INSERT ON table1
FOR EACH ROW
BEGIN

  INSERT INTO table2 (firstname, lastname, matchid)
  VALUES (NEW.firstname, NEW.lastname, NEW.id);

END; //

DELIMITER ;

这是我在 phpmyadmin 中得到的照片。您可以看到我没有弄清楚如何将 table2.matchid 加入到 table1.id

---编辑---

【问题讨论】:

  • 您是否意识到屏幕截图中的id 属于table2 而不是table1?一般来说,不要担心自动增量列的值。让 MySQL 为您管理它。
  • 是的@TimBiegeleisen 我意识到这一点,但我的意思是数据 7.0 和 2017-10-16 应该与 John Doe 位于同一行(请参阅捕获)。
  • 啊哈!您是否真的要将用户记录更新为最新值而不是插入新记录?
  • 我将举一个例子,以便更好地解释捕获!正如我提到的,7.0 和 2017-10-16 应该与 John Doe 相同! 26.1 和 2017-10-16 也是 John Doe 的第二次测量(假设在同一天),因此它们也应该以相同的原始显示。然后,我想插入一个不同的人,例如 Jane Doe,并能够将数据与她匹配,就像我对 John 所做的那样!
  • so they should be displayed in the same raw as well ...这对我来说毫无意义。也许你应该向我们展示你真正想要的输出。

标签: mysql triggers


【解决方案1】:

从您的 cmets 看来,您可能打算更新已存在于 table2 中的用户记录。如果是这样,您可以在更新时使用ON DUPLICATE KEY

DELIMITER //

CREATE TRIGGER after_user_insert AFTER INSERT ON table1
FOR EACH ROW
BEGIN

    INSERT INTO table2 (firstname, lastname, matchid)
    VALUES (NEW.firstname, NEW.lastname, NEW.id)
    ON DUPLICATE KEY UPDATE matchid = NEW.id;

END; //

DELIMITER ;

此解决方案要求table2 中的名字和姓氏都有唯一索引。如果你没有这样的唯一索引,那么你可以添加一个:

ALTER TABLE table2 ADD UNIQUE unq_idx (firstname, lastname);

【讨论】:

  • 所以,我必须先删除前一个触发器并插入这个 insted?而且,这个脚本将允许将新人从 table1 插入到 table2 中,就像之前的触发器一样?
  • 等一下...向我们展示在同一用户向table2 插入三次后您想要的输出。如果您希望最新的插入生效,我的回答是正确的。如果你想要别的东西,那就错了。
  • 啊哈,我明白了!我只是提供了一个示例,说明如果我插入来自不同人的数据以及应该如何匹配它们,table2 应该如何显示!
  • table1 上进行多次插入,顾名思义,意味着每次插入都有一个新的自动递增id 值,因此table2 中的新matchid 值。也许您可以了解table1 中发生的事情,然后应该触发table2 中的触发器。
  • 编辑您的问题并以清晰的语言描述您涉及两个表的确切流程。如果表述正确,那么需要做什么就很明显了。
猜你喜欢
  • 1970-01-01
  • 2015-10-27
  • 2015-12-16
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
相关资源
最近更新 更多