首先非常感谢toph解决了我的第一个问题
我目前有 2 个表,一个用于类(class),一个用于将导师链接到类(class),最初我只想获取某个导师未链接到的所有类(class)的列表,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 对于缺少的类(class),我可以用一些 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 值
-----更新----
看来我一开始没有提供足够的数据,所以我向所有人道歉,我希望这些额外的数据就足够了:
表 course 有以下字段:course_id (PK), 类(class), 等级, 部门编号
表 course_tutor_link 如下字段: ctl_id (PK), users_id, 位置, 类(class)编号
用户可以在不同的类(class)中担任不同的职位,例如,物理系系主任,化学系导师。也有可能(至少在开始时或当新成员加入时)用户不会成为任何类(class)的成员,因此我不能仅仅依赖于提取 course_tutor_link 中现有位置的数据,因为它可能有错误的位置或用户根本不存在。
users_id 的值保存在名为 $users_id 的 php 变量中,位置保存在名为 $user_type 的 php 变量中
问候
禅宗
最佳答案
是的,您可以使用 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;
编辑:
添加到位置
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;
关于MySQL INSERT 如果不存在但具有变化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839492/