我有两张桌子:
使用此查询在学生表格中填写所有“id”的标记表:
$module1= "insert into marks (stud_id,moduleID)
select sid, 1
from user_student
where sid not in (
select * from (
select distinct stud_id from marks where moduleID=1
) alias_name
)";
所以我需要从表学生中取出所有'sid',然后将它们填入表格标记我的查询就完成了所有这些。我遇到的问题是每次我对数据进行更改,例如列 test1 时,会再次插入新记录。
如果我手动填充标记表,我不能拥有一个代码,当学生表中有新数据时,数据只会在标记表中更新...
答案 0 :(得分:0)
我不理解您的插入查询的某些要点,为什么在sid
中插入stud_id
如果学生表中有id
来关联它们?
也许解决您的问题是创建moduleID
和stud_id
的组合唯一键,并使用REPLACE
代替INSERT
。
但正确的做法是使用TRIGGER
之类的:
DROP TRIGGER IF EXISTS `student_after_insert`;
CREATE TRIGGER `student_after_insert` AFTER INSERT ON `student`
FOR EACH ROW INSERT INTO marks (stud_id,moduleID)
SELECT NEW.`id`, `modules_table`.`id` FROM `modules_table`;
PS:我想你有一个名为modules_table
的模块表。相应地改变它。
答案 1 :(得分:0)
我无法理解你的问题,我的提示是:
在marks
表上建立一个唯一约束(由您决定最佳约束规则)。
然后使用触发器进行正确的插入/更新:
这样的事情,(希望语法是正确的):
CREATE TRIGGER myTrigger
AFTER INSERT ON students
FOR EACH ROW
BEGIN
// check that insertion doesn't broke the constraint previously define, then
insert into marks (stud_id,moduleID) values (new.sid, 1);
END
注意:NEW是您在学生上很快插入/更新的行。类似你有OLD metarow。