我有 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/