php - 如何更新关系表?

标签 php mysql database algorithm zend-framework

我有 3 张 table 。

用户(id、邮件、用户名等)

实践(id,名字)

UsersPractices (userId, practiceId)

最后一张是n-n的关系表。

我想更新这个,看用户的意愿。

这意味着,他可能想要添加或删除他的一些做法。

我可以使用什么算法来做到这一点?

将这项工作(如果有办法的话)交给数据库引擎会更好吗? 还是我应该编写自己的算法来处理数据,然后向数据库发出请求?

编辑:

要清楚:

___________________________
| UserId    |  PracticeId |
|-----------|-------------|
|    12     |     21      |
|-----------|-------------|
|    12     |     18      |
|-----------|-------------|

也许,用户会尝试将他的练习从 21 更改为 15,但希望保持练习 18。

因此,根据请求,我将得到 practices = array(15,18);

这意味着用户实践将如下所示:

___________________________
| UserId    |  PracticeId |
|-----------|-------------|
|    12     |     15      |
|-----------|-------------|
|    12     |     18      |
|-----------|-------------|

那么实现这一目标的最佳方法是什么?

我应该选择并检查每个练习,然后在需要时删除吗?

全部删除,添加新闻。

最佳答案

假设您有 InnoDB 表,将其作为事务处理。

这里的基本思想是擦干净石板,然后创建/重新创建关联。这比确定每次更新的增量(即单独检查每一行并确定它是 INSERT、UPDATE 还是 DELETE 操作)更容易。

这是您将使用的原始 SQL

BEGIN;

DELETE FROM UsersPractices
 WHERE userId = [User ID];

INSERT INTO UsersPractices (
       userId
     , practiceId)
VALUES ([User ID], [Practice ID 1])
     , ([User ID], [Practice ID 2])
     ...
     , ([User ID], [Practice ID N]);

COMMIT;

关于php - 如何更新关系表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364280/

相关文章:

php - 如何在 symfony2 功能测试中测试表单事件和事件监听器?

mysql - WAMP更新和迁移后,mysql表没有结构/主键

mysql - 如何访问MySql数据字典?

database - InfluxDB 中的事务操作

php - 在 php 中将 blob 保存到磁盘

php - sql 帮助从所有关注者获取数据? (如果我们关注,就像推特一样)

php - 希腊字母和 JSON 响应

php - Linux/CentOS PC 上的 php.ini 文件在哪里?

mysql - 获取表 A 中引用表 B 的行数

swift - 使用 Geofire 从 Firebase 查询特定节点?