2013-05-10 137 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