【发布时间】:2012-05-23 05:59:09
【问题描述】:
我经常遇到更新有很多关系的问题。 比如下面三个表:
- 帖子
- 标签
- posts_tags
当用户创建新帖子时,他可以为帖子添加标签。帖子已保存,所选标签通过_posts_tags_附加到它。
当用户编辑帖子(也可能编辑标签列表也可能不编辑)并提交表单时,我必须更新帖子的标签列表。
解决方案可以是:更新帖子时,我从_posts_tags_中删除该帖子的所有标签,并插入提交的标签。
另一种解决方案是从数据库中获取帖子的所有标签,将列表与提交的标签进行比较,然后决定我们必须删除什么以及我们必须插入什么。
这两种解决方案都可能很耗时。
对于这个问题有什么更聪明的解决方案?
【问题讨论】:
-
我有点累和昏昏欲睡,所以请耐心等待(可能读错了),但这不是级联的吗?
-
@Bono:不。问题不是如何在外部表中的相关记录之间级联更新,而是如何检测一组记录中的哪些记录在应用程序中被修改以反映数据库中的那些修改。
-
在您发布的两个解决方案中,第一个通常更可取。使用索引的删除将比第二个所需的比较类型更快。至于寻找更“聪明”的解决方案,您是否应该考虑在这里申请KISS principle?
标签: php mysql has-many has-many-through