MySQL INSERT 如果不存在但具有变化的值

标签 mysql

首先非常感谢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/

相关文章:

mysql - Sphinx 或 MySQL 全文搜索不到 1000 个数据条目?

java - 如何使用时间延迟在jtextarea中显示数据库数据?

php - $_POST 为空,使用 Ajax 发送表单值

php - 检查数据库是否存在(MySQL),如果不存在,则在 PHP 中创建它

mysql - 将行数添加为新列

javascript - javascript中的价格滑动条给出适当的结果

Mysql - 帮助我更改此涉及多个联接和条件的搜索查询以获得所需的结果

mysql - 在表中添加 Codeigniter 数据库前缀

php - 将选定的值保存在数据库中作为 id

php - MySQL存在则更新,不存在则插入