首先,非常感谢toph解决我的第一个问题,
我目前有2个表,一个用于课程,另一个用于将导师与课程相关联,最初我想得到一个特定导师没有链接到的所有课程的列表,toph用以下代码解决了这个问题:
SELECT c.course_id, c.course
FROM course AS c
LEFT JOIN course_tutor_link AS ctl
ON c.course_id=ctl.course_id AND ctl.users_id=$users_id
WHERE ctl.course_id IS NULL
就像魅力一样,我的下一步是为该导师插入链接 course_tutor_link为缺少的课程,我可以用一些PHP循环上面的结果作为一个简单的INSERT命令导致
INSERT INTO course_tutor_link
(course_id, position, users_id)
VALUES(2,'swsa',9),(3,'swsa',9),(4,'swsa',9)... etc
但后来我考虑过是否可以将所有这些作为单个查询完成,如果它只是一组值,我可以根据这个SO链接来做:MySQL: Insert record if not exists in table但我不知道如何扩展它以便循环遍历从我的原始查询输出的每个course_id值
----- ---- UPDATE
看来我在开始时没有提供足够的数据,所以我向所有人道歉,我希望这些额外的数据就足够了:
表课程包含以下字段:course_id(PK), 课程, 水平, 部门标识
表course_tutor_link如下字段: ctl_id(PK), users_id, 位置, COURSE_ID
用户可能在不同的课程中拥有不同的职位,例如担任物理系主任,但却是化学辅导员。也可能(至少在新成员加入时)或用户不会成为任何课程的成员,因此我不能仅仅依赖于拉取course_tutor_link中现有职位的数据,因为它可能具有错误的位置或用户根本不存在。
users_id的值保存在名为$ users_id的php变量中,并且该位置保存在名为$ user_type的php变量中
问候
禅
答案 0 :(得分:1)
是的,您可以使用insert . . .select
语法执行此操作:
INSERT INTO tutor_course_link(course_id, users_id)
SELECT c.course_id, c.course
FROM course c
LEFT JOIN course_tutor_link ctl
ON c.course_id=ctl.course_id AND ctl.user_id=$users_id
WHERE ctl.course_id IS NULL;
编辑:
添加position
INSERT INTO tutor_course_link(course_id, users_id)
SELECT c.course_id, 'swsa', c.course
FROM course c
LEFT JOIN course_tutor_link ctl
ON c.course_id=ctl.course_id AND ctl.user_id=$users_id
WHERE ctl.course_id IS NULL;
答案 1 :(得分:0)
INSERT INTO tutor_course_link
(course_id, position, users_id)
VALUES (
SELECT c.course_id, 'swsa', $users_id
FROM course AS c
LEFT JOIN course_tutor_link AS ctl
ON c.course_id=ctl.course_id AND ctl.user_id=$users_id
WHERE ctl.course_id IS NULL)