我有一个数据库,里面有一堆表。这些表中的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的变化情况如何?
答案 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/该页面似乎显示了如何执行此操作。这就是小提琴中的模式//终止某些语句的原因。