php - MySQL在多对多连接中复制记录

标签 php mysql sql stored-procedures many-to-many

我在 MySQL 中有一个多对多连接,将角色链接到任务(三个表:角色、任务和角色_任务)。每个角色和任务都属于一个项目。

Roles Table
id | project_id | role
---|------------|-------------
1  | 1          | Supervisor
2  | 1          | Manager

Tasks Table
id | project_id | task
---|------------|-------------
1  | 1          | Do this
2  | 1          | Do that

role_task Table
role_id | task_id
-----------------
1       | 1
1       | 2
2       | 1

我正在寻找一种纯 SQL 方法来将角色、任务及其关联的多对多连接从一个项目复制到另一个项目。我想完成的是:

Roles Table
id | project_id | role
---|------------|-------------
1  | 1          | Supervisor
2  | 1          | Manager
3  | 2          | Supervisor
4  | 2          | Manager

Tasks Table
id | project_id | task
---|------------|-------------
1  | 1          | Do this
2  | 1          | Do that
3  | 2          | Do this
4  | 2          | Do that

role_task Table
role_id | task_id
--------|--------
1       | 1
1       | 2
2       | 1
3       | 3
3       | 4
4       | 3

我可以毫无问题地复制/复制角色表和任务表中的数据。但是,如何使用新的角色 ID 和任务 ID 复制 role_task 表?我可以在 PHP 中使用循环并获取插入的 id,但更喜欢纯 SQL 解决方案。谢谢

最佳答案

我能够做到这一点的唯一明智的方法是向保存原始记录 ID 的角色和任务表添加一个字段。 role_task 表保持不变,但我的其他两个表现在看起来像这样:

roles table
id | project_id | original_id | role
---|------------|-------------|-----
1  | 1          | 0           | Supervisor
2  | 1          | 0           | Manager

tasks table
id | project_id | original_id | task
---|------------|-------------|-----
1  | 1          | 0           | Do this
2  | 1          | 0           | Do that

因此,将角色和任务复制到 project_id 为 3 的 SQL 是:

INSERT roles
SELECT NULL, 3, id, role FROM Roles WHERE project_id = 1

INSERT tasks
SELECT NULL, 3, id, task FROM Tasks WHERE project_id = 1

然后,复制多对多表:

INSERT role_task
SELECT r.id, t.id
FROM role_task AS rt
LEFT JOIN roles AS r ON rt.role_id = r.original_id
LEFT JOIN tasks AS t ON rt.task_id = t.original_id
WHERE  r.project_id = 3
AND    t.project_id = 3

关于php - MySQL在多对多连接中复制记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38101630/

相关文章:

php - ssh 连接虽然 ssh2_connect 失败

mysql - 在 innoDB 中优化 MySQL LIKE '%string%' 查询

sql - 无法使用插入(XML DML)插入新节点

mysql - 组合框并从数据网格显示

mysql - 无法连接到 mySQL,因为无法识别服务器时区值 'GMT Summer Time'

mysql - mysql 中存储函数创建错误 #1064

php - 如何使用 php 在 select 中提取 select 的值?

php - Magento 获取 Stock.php 中的产品属性文本

php - 无法在 pdo 语句中连接 sql

php - 如何在 AngularJS 应用程序中使用 PHP/Mysql 生成的 json