PHP更新MYSQL的多对多关系

前端之家收集整理的这篇文章主要介绍了PHP更新MYSQL的多对多关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个多对多关系,用 MySQL中的关联表实现.我有一张儿童餐桌和一张父母餐桌.子项可以有多个父项,保存在parent_child_link关联表中,并带有其ID.

可以通过HTML表单更新子项,父项是HTML多选.现在我需要更新数据库中的记录,但我的解决方案效率不高.这是伪代码我做的:

>更新child_id = x的子信息
>删除parent_id_link中child_id = x的所有当前关联
>插入新关联

这种解决方效果很好,但是当父母没有改变时,例如只更改了孩子的名字,然后执行了2个不必要的查询.如何避免那些不必要的查询?有没有办法检查多选中的父母是否没有改变?

当然,我可以忽略所有这些麻烦,因为它已经有效,但我真的希望尽可能保持高效.

尝试在子表的定义中使用ON UPDATE CASCADE和ON DELETE CASCADE在数据库中而不是在应用程序层中解决它.

MysqL网站略有修改的示例:

CREATE TABLE parent (id INT NOT NULL,PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT,parent_id INT,INDEX par_ind (parent_id),FOREIGN KEY (parent_id) REFERENCES parent(id)
                      ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB;

查看文档:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

编辑:对于你的多对多关系,你可以使用类似的东西:

CREATE TABLE parent_child_link (
                    parent_id INT NOT NULL,child_id INT NOT NULL,PRIMARY KEY(parent_id,child_id),FOREIGN KEY (parent_id) REFERENCES parent(id)
                      ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY (child_id) REFERENCES child(id)
                      ON DELETE CASCADE ON UPDATE CASCADE
);

希望这可以帮助.

猜你在找的PHP相关文章