我有三个 3 表(classes、module、module_classes),为简单起见,假设它们如下: 类表:
+-----+---------+----------+-----------+-----------+
| id | name | level | deleted |create_time|
+-----|---------+----------|-----------+-----------+
|1 | C1 |4 | 1 |some date |
|2 | C2 |2 | 0 |some date |
|3 | C1 |1 | 0 |some date |
+-----+---------+----------+-----------+-----------+
模块表:
+-----+---------+----------+
| id | name | deleted |
+-----|---------+----------|
|1 | M1 |0 |
|2 | M2 |0 |
|3 | M1 |0 |
+-----+---------+----------+
模块类表:
+-----+---------+----------+
| id | classId | moduleId |
+-----|---------+----------|
|1 | 1 |1 |
|2 | 2 |2 |
|3 | 1 |3 |
+-----+---------+----------+
每学期等级增加一级,4个学期后类(class)将被设置为删除,并插入同名但等级1的新类(class),模块将保持不变,module_class中的类(class)ID必须是从删除的类更新到插入的类,所以它必须变成这样:
+-----+---------+----------+
| id | classId | moduleId |
+-----|---------+----------|
|1 | 3 |1 |
|2 | 2 |2 |
|3 | 3 |3 |
+-----+---------+----------+
我不知道如何实现这一点,有什么关于如何做到这一点的建议吗?提前致谢
最佳答案
尝试这个触发器
DROP TRIGGER IF EXISTS TRIGGER_class_UPDATE;
DELIMITER $$
CREATE TRIGGER TRIGGER_class_UPDATE BEFORE UPDATE ON class FOR EACH ROW BEGIN
SET @moduleId= (SELECT moduleId FROM module_class WHERE class_id=old.id);
IF NEW.level=4 THEN
SET NEW.deleted=1;
INSERT INTO class(name,level,deleted,create_time) values (old.name,1,0,now());
set @newclassid=(SELECT ID FROM class WHERE name=old.anem and deleted=0 and level=old.level);
INSERT INTO module_class(classId,moduleId) values (@newclassid,@moduleId);
ELSE
SET NEW.deleted=0;
END IF;
END$$
DELIMITER ;
关于mysql - sql:我需要帮助来找出查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38036621/