2013-05-10 84 views
1

我正在设计一个博客网站在PHP中,用户可以添加手动相关帖子到一个帖子。如何添加手动相关的帖子到帖子?

我以为所有相关帖子都使用自动增量整数。

这是表:

Blog: 
-id 
-related (it's 0 if there aren't related posts or it contain an autoincremet integer that it is the same for all posts related) 
-id_user 
-title 
-body 
-date 

我不喜欢使用“相关表”如果可能的话,避免复杂的查询。

所以我需要一种方法在这种情况下获得一个自动递增整数或者你可以给我建议其他的解决方案:)

回答

3

为什么没有第二个表?这可能是最强大的解决方案,它根本不会强化你的查询。

您应该有第二张表related-posts,有两个字段:originalrelated

也不是唯一的,所以下面是可能的(假设1,2,3,4被后的ID)

o | r 
--+-- 
1 | 2 
1 | 3 
2 | 3 
2 | 4 
4 | 1 

当你需要找到张贴(举例)相关的帖子,您查询

SELECT `related` FROM `related-posts` WHERE `original` = 1; 

这会给你所有相关帖子的ID。


这种关系被称为许多一对多关系,一个岗位可以有很多相关的帖子,和一个后可以与许多原有的职位。

+0

没错,这样的复杂性和数据冗余实际上是减少了。 – 2013-05-10 08:18:16

+0

所以在这种情况下,当用户发布,所以我需要做2个查询(插入博客表并插入相关表)? – xRobot 2013-05-10 08:35:53

+0

@xRobot:不,只有当您添加相关帖子时,您才会更新'related-posts'表。它是原始表格的一个完全独立的部分。 – 2013-05-10 08:50:48

0

您可以将related设置为NULL,之后您可以检查它是否为NULL - 那么就没有相关的帖子。

要选择所有相关的帖子:

SELECT * FROM Blog where related=:blog_id 
+0

好的,但如果相关不为空,我怎么能得到相关的所有职位是唯一的自动增量整数? – xRobot 2013-05-10 08:18:07

+0

只需检查相关文章的数量,并在添加相关博客时将其写入某个列:'select count(id)from Blog where related =:blog_id' 当然,只有在使用模型时才适用。 – IlyaDoroshin 2013-05-10 08:20:06

+0

@IlyaDoroshin你不*只是*写东西到数据库。 – 2013-05-10 08:23:07