【发布时间】:2015-11-20 05:03:31
【问题描述】:
我刚刚使用 PHP 完成了我的第一个站点,现在我注意到了一个问题。我的很多动态内容都“链接”到其他表中的行。所以当其他表中的那些行被删除时,它显然会给我一个错误。
例如,我有一个表“book_groups”,它从表“books”、“hosts”和“locations”中提取数据。所以在查询了某个 book_group 之后,我会根据 group 中存储的 book_id、host_id 和 location_id 对其他表进行更多查询。
显然我的计划不够好。因为如果一本书不小心被删了又重新添加,id会变,会坏掉。
我的问题是,既然我已经完成了这一切,那么解决这个问题的最佳方法是什么?我可以返回每个查询并添加一个 if( $query_result != false ) 以查看该行是否仍然存在。但是有很多查询,因为我有很多不同类型的组和相关表。
为了将来参考,有没有更好的方法来链接 MySQL 中的表,而不是只存储相关表行的 id?
【问题讨论】:
-
您正确链接了它们。一种解决方案是在您的代码中提供一个条款,如果一本书被删除,那么依赖该书的 book_groups 也会被删除。许多 MVC 框架为这种功能提供了开箱即用的解决方案,例如依赖于 Rails 的: :destroy (我知道你使用的是 PHP - 这只是我想到的第一个例子)
-
在我看来是一对多的映射。我想现在 INNER JOIN 您的查询为时已晚?我认为“book_group”应该只是与一本书关联的 id 列表,然后通过 group_id 进行 INNER JOIN,你只会获取存在于 books 表中的书,你可以稍后修剪你的 book_group。
-
我不想删除任何组。我只想能够更改当前与之关联的书。我对 MVC 框架一无所知(这对我来说是全新的),但我会研究一下。