是否有可能,如果是这样,如何在两个不同的表中“链接”两个MySQL数据库列?

时间:2015-03-29 14:22:36

标签: mysql

我有一个数据库,里面有一堆表。这些表中的8个具有名为“status”的字段,该字段提供该行内数据的有效状态通知。

我有另一个表,就像前面提到的8的索引一样,这也有一个匹配的“status”col。目前如果状态col在8个数据集合表中的一个中发生变化,我需要让php也更新相关的索引表状态col来匹配。如果我在MySQL内部有一种方法可以将索引表的“状态”字段链接到匹配的“状态”字段,核心数据所在的八个表中的任何一个字段,那么编码监督就会更好,更不容易出错。根据所选的表单类型,它将始终只是八个中的一个。这样的事情有可能吗?

根据要求添加数据。首先是我称之为“索引”表的示例。任何放入其他8个提到的表中的数据的数据也将在此表中有一个条目。

id  appNo   applicationKey  applicationName             uID     status
1   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Data Acquisition
2   2       AIGs1PIA        A.I.G stage 1 Process App   1       Data Acquisition
3   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Declined
4   2       AIGs1PIA        A.I.G stage 1 Process App   1       Data Acquisition
5   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Data Acquisition
6   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Pending Review
7   8       VisFelAp        Visiting Fellowship App     1       Data Acquisition
8   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Data Acquisition
9   8       VisFelAp        Visiting Fellowship App     1       Accepted

id是自动增量。 appNo和applicationKey用于标识正在输入的应用程序类型。 applicationName很明显,uID是进入应用程序的用户的id - 我自己在所有这些情况下所以他们现在都是“1”。最后一个col,'status'是我希望在数据所在的任何其他表中“链接”到相关匹配列的内容。这由applicationKey指示 - 例如,此处第一个条目的数据将存储在名为“app_AIGs2GRA”的表中,而最后一个(id 9)条目的数据将驻留在“app_VisFelApp”表中。

所有数据表都以相同的方式开始,如下所示:

appID   uID     uaID    status
1       1       2       Data Acquisition
2       1       4       Data Acquisition

此示例取自app_AIGs1PIA表,您将看到uaID编号如何与索引表中的ID编号匹配。这里的“状态”列数据,同样在其他数据表中,我需要“链接”到索引表中的相关“状态”列。所以,如果它在这里发生变化,那么就成为了这个:

appID   uID     uaID    status
1       1       2       Data Acquisition
2       1       4       Pending Review

索引表将成为:

id  appNo   applicationKey  applicationName             uID     status
1   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Data Acquisition
2   2       AIGs1PIA        A.I.G stage 1 Process App   1       Data Acquisition
3   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Declined
4   2       AIGs1PIA        A.I.G stage 1 Process App   1       Pending Review
5   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Data Acquisition
6   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Pending Review
7   8       VisFelAp        Visiting Fellowship App     1       Data Acquisition
8   3       AIGs2GRA        A.I.G stage 2 Grant App     1       Data Acquisition
9   8       VisFelAp        Visiting Fellowship App     1       Accepted

注意条目号4的变化情况如何?

2 个答案:

答案 0 :(得分:0)

只需在特定列上使用触发器。

CREATE  TRIGGER  myTrigger AFTER UPDATE ON myTable
 FOR EACH ROW
if NEW.column1 <> OLD.column1
begin 
@new_index = NEW.youColumn
--put @new_index in your desired table using UPDATE statement
end
END

答案 1 :(得分:0)

CREATE TRIGGER statusUpdateTrigger AFTER UPDATE on app_AIGs2GRA
FOR EACH ROW
BEGIN
  IF NEW.status <> OLD.status
  THEN
    UPDATE status_index SET status = NEW.status 
      WHERE appNo = NEW.appID AND applicationKey = 'AIGs2GRA';
  END IF;
END;

这是一个小提琴演示:http://sqlfiddle.com/#!9/768c2/1。现在你需要为每个单独的app表创建这个触发器,并在每个触发器中指定applicationKey(除非它在某个地方的另一个关系,你可以这样抓住它)

您可以像运行查询一样在phpMyAdmin中创建触发器,只需执行SQL

即可

注意:因为触发器在定义中包含分号,您需要更改phpMyAdmin使用的分隔符 - http://phpsblog.agustinvillalba.com/create-triggers-phpmyadmin/该页面似乎显示了如何执行此操作。这就是小提琴中的模式//终止某些语句的原因。