MySQL INSERT如果不存在但值不断变化

时间:2013-12-30 12:23:14

标签: mysql

首先,非常感谢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变量中

问候

2 个答案:

答案 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)