我自己创建了一个网站,允许用户互相添加为朋友并对其他帖子发表评论。在调查之后,我不确定如何开始。我有帖子和用户表。
我的问题是如何将数据库与之相关联 1.检查用户A是否向用户B发送了好友请求? 2.存储一个值来表明他们是朋友?
我在发布之前浏览了这个网站,但似乎无法理解如何进行此操作。很确定我只是让它复杂化了。任何人都可以解释这个概念或它的工作原理吗?
答案 0 :(得分:6)
这可以通过关系数据库完成,值得了解关系数据库如何工作,例如https://www.youtube.com/watch?v=NvrpuBAMddw
但是 - 为了给出一些指示,看起来你希望你的关系数据库允许以下功能:
1)让我们从朋友请求开始#39;部分。
这需要你拥有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
让我们说迈克尔想要成为爱丽丝和弗雷德的朋友,而爱丽丝想要和索菲成为朋友 - 你想要在你的朋友表中创建看起来像这样的记录:
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 =您需要的用户ID,以便获得相同的结果,例如:表格略有不同:
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 =已确认。
当请求友谊时,您将记录添加到表中,但是当确认时,您将更新“已确认的”#39;该记录的字段为1。
让我们相应地更新我们的朋友表:
FriendID, userID1, userID2, confirmed
1 3 (Michael) 4 (Alice) 0
2 3 (Michael) 1 (Fred) 1
3 4 (Alice) 5 (Sophie) 1
如果你想看到所有正在等待Michael接受的朋友,你可以搜索:
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
我们已经有了你的用户表,所以让我们说Michael希望发布一些内容。 posts表可能如下所示:
postid, userid, date content
1 3 (Michael) [auto datetime] Hi everyone
2 3 (Michael) [auto datetime] This is my second post
您现在已经获得了迈克尔与帖子表之间的关系。如果其他用户发布了某些内容,则他们会添加另一个具有不同用户ID的行。然后,您可以从posts表中检索userid = 3的所有帖子,这是Michael的用户ID。
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