2012-01-10 115 views
1

我讀過幾篇教程,關於mysql,db結構的文檔,還有我通過PHP使用它幾周。現在我遇到了問題,我不知道如何爲帖子和評論創建/組織/創建我的數據庫結構。我已經閱讀了一些關於此的帖子(這裏是在stackoverflow),但我沒有發現任何有用的東西。我知道我需要有2個表格來發表帖子和評論,當我需要用外鍵(或ID)在頁面上打印它們時,我會「合併」它們(只在頁面上,而不在SQL中)。當一個人正在查看該頁面時,他通常會看到帖子並發表評論,但在「背景」中,所有內容都存儲在2個表格中。mysql結構的帖子和評論

我是否需要在每次添加新評論或回覆時添加新列?

如果我的問題是真的,那意味着如果在一篇文章中有超過100條評論,那意味着我需要每隔一段時間更改一次表格?這意味着如果帖子「A」有3條評論,帖子「B」有150條評論,我的表「評論」將有100條帖子?

E.g:

帖子 | column1 | column2 | ... | columnN

A | bla1 | bla2 | bla3 | - 空的| - 空的| ... | - 空 - |

B | bla1 | bal2 | bla3 | bla4 | bla5 | bla6 | ... | bla100 |

+1

否。「變更表」應該是一件非常罕見的事情,僅對「業務需求」的變化做出響應。 Google針對「數據庫規範化」(以及一般的RDBMS理論)來了解如何/爲什麼更好地構建數據庫。 – 2012-01-10 17:48:57

+0

不,你說CommentID和CommentContent並添加另一行每個評論。 – 2012-01-10 17:50:25

+0

我同意@Marc B ...但是,快速回答是一個像這樣的結構:'POSTS(id,title,text); COMMENTS(id,postid,text);'。每個帖子在'POSTS'中有一行,每個註釋在'COMMENTS'中有一行。您知道哪些評論是針對哪些帖子使用與posts相匹配的'comments.postid'。身份證「的職位。 – Rudu 2012-01-10 17:52:26

回答

6

在基本級別上,應用程序中的每種類型的「事物」都有一張表。在這種情況下,一個表和一個表的評論。事情如此簡單:

Post 
-------- 
Id 
Content 
User 
DatePosted 

Comment 
-------- 
Id 
PostId 
Content 
User 
DatePosted 

這將產生什麼所謂的文章和評論之間的一個一對多(或零對許多人來說,實際上)的關係,因此各崗位能夠具有零個或多個相關Pomments但每個評論只能與一個帖子相關聯。

在您的代碼(完全是一個完整的其他主題)中,要顯示帖子及其相關注釋,您可以執行一些操作。假設你有,作爲輸入你想要的郵政Id,你可以得到郵政及其評論:

SELECT `Content`, `User`, `DatePosted` FROM `Post` WHERE `Id` = ?Id 
SELECT `Id`, `Content`, `User`, `DatePosted` FROM `Comment` WHERE `PostId` = ?Id 

你與得到的數據做什麼,完全由你,你要如何使用它你的申請。它將作爲兩個表格結果返回,其中前者具有一個記錄(如果該文章存在)並且後者具有零個或更多記錄。當然,在試圖使用它們之前,你會希望檢查它們是否存在(等等)(因此,如果第一個查詢沒有返回結果,不要試圖繼續顯示帖子,只需顯示默認響應或錯誤。)