我正在开发用于管理老板的Rally公司的软件,他可以在其中管理所有志愿者,他们的感情以及许多其他事情。但是,志愿者和其他事情因事件而异,因此他们都有一列来表示与他们相关联/相关的事件。
我的老板要求我添加一个“复制”按钮,该按钮将复制一个事件(从我的事件表中复制),并且还复制所有志愿者以及与该事件链接的任何其他表中的值,因此新复制品将链接到新事件。
这样做的原因是,他一直在组织集会,而且经常发生从一个Rally(事件)到另一个事件的数据几乎相同,因此,他宁愿做一个完整的重复操作,而不是手动添加所有数据事件以及与之相关的所有数据,然后手动添加和删除其中的错误。
我想知道,MySQL中有什么方法可以复制事件,以及与该事件ID关联的所有内容,即使它们位于不同的表中,并使重复项具有新事件的ID?
遗憾的是我没有太多时间,但是直到得到答案之前,我才能处理老板给我的其他任务。
非常感谢任何帮助我或给我任何提示的人!
编辑:这是我的数据库的架构(我知道它有点脏,而且有问题,我的老板给了我有关如何创建数据库的指示,因为他以前曾经在域中工作过,但是他没有告诉我如何做链接,他想自己做。)我对法语和怪异的名字表示歉意。基本上,我希望在“事件”表中复制一个条目,所有“影响”和“环境”条目都是链接到它,并且所有“ tache”条目都与重复的“ lieu”条目相关。
编辑2:谢谢MrMadsen的查询!我必须对其进行一些修复,但这是之后的样子。
SET @NEWEVEN = (SELECT MAX(NO_EVE) from db_rallye.event)+1;
INSERT INTO db_rallye.event
SELECT @NEWEVEN,
NM_EVE,
AN_EVE,
DT_EVE,
NM_REG_EVE
FROM event
WHERE NO_EVE = event_to_duplicate;
SET @NO_AFFECT_LIEU = (SELECT MAX(NO_AFF) from db_rallye.affect);
INSERT INTO db_rallye.affect
SELECT @NO_AFFECT_LIEU:=@NO_AFFECT_LIEU+1,
CO_AFF,
DT_AVI_AFF,
DS_STA_AFF,
CO_STA_AFF,
NO_BRA_EVN,
NO_PERS,
@NEWEVEN,
NO_EQU,
NO_LIE,
NO_PERS_RES,
IN_LUN,
IN_BAN,
DS_HEB,
IN_HEB_JEU,
IN_HEB_VEN,
IN_HEB_SAM,
NO_BOR,
NO_TUL_CAH,
NB_SPEC
FROM affect
WHERE NO_EVEN = event_to_duplicate;
INSERT INTO db_rallye.lieu
SELECT NO_LIE,
@NEWEVEN,
CO_LAT,
CO_LON,
FI_IMA,
FI_CRO,
FI_TUL,
DS_LIE,
DS_COU,
DS_LON,
NB_BLK,
VL_KM,
IN_FUS,
VL_DIS_FUS,
NO_LIE_FUS_SUI
FROM lieu
WHERE NO_EVEN = event_to_duplicate;
SET @NO_AFFECT_TACHE = (SELECT MAX(NO_TAC) from db_rallye.tache);
INSERT INTO db_rallye.tache
SELECT @NO_AFFECT_TACHE:=@NO_AFFECT_TACHE+1,
NO_LIE,
@NEWEVEN,
NO_AFF,
DS_REP,
DS_TAC
FROM tache
WHERE NO_LIE IN
(SELECT NO_LIE FROM lieu WHERE NO_EVEN = event_to_duplicate);
如果很多事件都包含与我相似的信息,那么我将创建一个模板(或包含模板以及创建/修改模板的功能),其中包含您将要复制的所有信息。
然后,在创建新事件时,他只能选择一个开始模板,然后仅添加该事件唯一的任何数据。我认为,这比不断复制数据要好得多。
至于如何复制一行和所有关联的行,这完全取决于您的数据库架构以及表之间的关系。如果您发布其中的相关部分,我们可以为您提供更多帮助。
以下是我提出的查询,请先在开发数据库中对其进行测试,但我认为它们会起作用。让我知道。祝你好运!
INSERT INTO `event`
SELECT NULL NO_EVE,
NM_EVE,
AN_EVE,
DT_EVE,
NM_REG_EVE
FROM `email_log`
WHERE id NO_EVE = id_of_event_to_duplicate
INSERT INTO `affect`
SELECT NULL NO_AFF,
CO_AFF,
DT_AVI_AFF,
DS_STA_AFF,
CO_STA_AFF,
NO_BRA_EVN,
NO_PERS,
NO_EVEN,
NO_EQU,
NO_LIE,
NO_PERS_RES,
IN_LUN,
IN_BAN,
DS_HEB_JEU,
IN_HEB_VEN,
IN_HEB_SAM,
NO_BOR,
NO_TUL_CAH,
NB_SPEC
FROM `affect`
WHERE NO_EVE = id_of_event_to_duplicate
INSERT INTO `lieu`
SELECT NULL NO_LIE,
NO_EVEN,
CO_LAT,
CO_LON,
FI_IMA,
FI_CRO,
FI_TUL,
DS_LIE,
DS_COU,
DS_LON,
DB_BLK,
VL_KM,
IN_FUS,
VL_DIS_FUS,
NO_LIE_FUS_SUI
FROM `lieu`
WHERE NO_EVEN = id_of_event_to_duplicate
INSERT INTO `tache`
SELECT NULL NO_TAC,
NO_LIE,
NO_EVEN,
NO_AFF,
DS_REP,
DS_TAC
FROM `tache`
WHERE NO_LIE IN
(SELECT NO_LIE FROM `lieu` WHERE NO_EVEN = id_of_event_to_duplicate)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句