2014-11-23 67 views
-3

我已經自己創建了一個網站,允許用戶互相添加朋友並對彼此發表評論。看着這個之後,我不確定如何開始。我有一個帖子和一個用戶表。創建一個SQL朋友表來存儲

我的問題是如何將數據庫與 聯繫起來1.檢查用戶A是否向用戶B發送了好友請求? 2.存儲一個值表明他們是朋友?

我在發佈之前瀏覽過此網站,但似乎無法理解如何執行此操作。很確定我只是在複雜化。任何人都可以解釋這個概念或者它是如何工作

回答

6

這可以通過關係數據庫來完成,值得關注關係數據庫是如何工作的。 https://www.youtube.com/watch?v=NvrpuBAMddw

但是 - 給一些指針,它看起來像尤爾希望你的關係型數據庫,允許以下功能:

  • 用戶數量
  • 一系列職位,某些用戶
  • 用戶之間的若干關係
  • 在確認之前驗證關係的能力
  • 一系列帖子,由特定用戶
  • 許多「子郵報」評論的帖子

1)讓我們開始與「好友請求」部分。

這需要您有a)不同用戶的全部負載,以及b)這些用戶之間的關係負載。

你需要表示,在2頁不同的表 - 所以創建一個users表具有以下字段:

UserID, name, age, [details, password, address etc etc] 

然後friends表具有以下字段:

friendID, userID1, userID2, [date, confirmed] 

您的用戶表可能如下所示:

UserID, name,  age, 
    1  Fred  18 
    2  George  24 
    3  Michael 20 
    4  Alice  24 
    5  Sophie  20 
    6  George  19 

讓' 。比如說,邁克爾想成爲朋友Alice和弗雷德,愛麗絲要交好蘇菲 - 你想創建你的朋友表中記錄的是這個樣子:

FriendID, userID1,       userID2, 
    1   3 (this refers to Michael)   4 (this refers to Alice) 
    2   3 (this refers to Michael)   1 (this refers to Fred) 
    3   4 (this refers to Alice)   5 (this refers to Sophie) 

所以,如果你再看着邁克爾的朋友 - 你會做哪些看了查詢:

every record from the friend table where userID1 = Michael's userID. 

From the userID2 field, you'd get userID 4 and userID 1 

By looking up those userids in the user table, you'd find more details for Alice and Fred. 

你應該把這個查詢檢查是否userID1 OR userid2 =你所需要的,讓你得到,例如如果相同的結果的用戶標識表看上去有些不同:

FriendID, userID1,       userID2, 
    1   3 (this refers to Michael)   4 (this refers to Alice) 
    2   1 (this refers to Fred)   3 (this refers to Michael) 
    3   4 (this refers to Alice)   5 (this refers to Sophie) 

Otherwise you'd only know about Alice.. but you want to know about Fred too. 

2)如果您想確認的關係,你可以一個「確認」字段添加到好友表 - 將其設置爲二進制0 =沒有確認/ 1 =證實。

當請求的友誼,你的記錄添加到表,但是當它被證實了,你會更新「證實」該記錄的字段1

讓我們相應地更新我們的朋友表:

FriendID, userID1,    userID2,  confirmed 
    1   3 (Michael)   4 (Alice)  0 
    2   3 (Michael)   1 (Fred)  1 
    3   4 (Alice)   5 (Sophie)  1 

如果你想看到正在等待邁克爾的接受所有的朋友,你會搜索:

any records from the friends table where userid1 = 3 
    AND confirmed = 0 ... which means it hasn't been accepted yet. 

這將表明愛麗絲至今還沒有一個由邁克爾接受爲朋友。

如果你想看到用戶已請求但尚未被接受,你會尋找所有的朋友:

any records from the friends table where userid2 = the user you're looking for 
    AND confirmed = 0 ... which means it hasn't been accepted yet. 

如果你想看到所有接受的好友,開關「確認」 1 。

3)您也想爲每一個用戶的帖子......所以你需要一個posts表的字段:

postid, userid, date, content 

我們已經得到了你的用戶表,所以讓說邁克爾想要發佈一些東西。帖子表可能如下所示:

postid, userid,   date    content 
    1  3 (Michael) [auto datetime]  Hi everyone 
    2  3 (Michael) [auto datetime]  This is my second post 

您現在已經在Michael和帖子表之間建立了關係。如果另一個用戶發佈了一些內容,他們會添加另一個不同用戶標識的行。然後,您可以從posts表中使用userid = 3(這是Michael的用戶標識)檢索所有帖子。

4)增加關於員額的評論,你會需要一個意見表可能看起來像這樣的:

commentid, postid,   userid    content 
    1   1    3 (Michael)   Michael is commenting on his own first post... 
    2   2    4 (Alice)   Alice is saying something on Michael's second post 
+0

感謝您的深入答覆。這個回覆正是我所期待的。對不起,如果問題太廣泛。我有時很難解釋。 – user3624810 2014-11-24 03:10:36

+1

如果你想查找蘇菲的朋友,該怎麼辦?你的sql在返回時不會返回任何東西4 – anonymouse 2016-03-16 13:15:31

+0

謝謝你指出。我編輯了答案。 – Simeon 2016-03-16 16:51:23

相關問題