Mysql PHP-将用户添加为好友
我有一个社交网站,你可以添加朋友。其工作方式如下:Mysql PHP-将用户添加为好友,mysql,database-design,Mysql,Database Design,我有一个社交网站,你可以添加朋友。其工作方式如下: 单击添加朋友 将单击的用户添加到 数据库行,如列中的 [鲍勃][弗雷德][123123] 弗雷德在核实中接受了这个秘密 链接,通过电子邮件 然后,这会将另一行放入 反过来说,比如 这是[fred][bob][123123] 然后我可以确定他们是否是朋友,他们是否被接受 然而,这肯定不是正确的方法。我现在很不确定哪种方法可以更好,运行更平稳。您好,您可以试试这种逻辑 假设bob想将fred添加为朋友 bob让fred添加为好友 操作:将数据库
- 单击添加朋友
- 将单击的用户添加到 数据库行,如列中的 [鲍勃][弗雷德][123123]
- 弗雷德在核实中接受了这个秘密 链接,通过电子邮件
- 然后,这会将另一行放入 反过来说,比如 这是[fred][bob][123123]
然而,这肯定不是正确的方法。我现在很不确定哪种方法可以更好,运行更平稳。您好,您可以试试这种逻辑 假设bob想将fred添加为朋友
其实没有对错之分,它是你决定使用的,最终它是你的代码,所以无论你选择什么,它都为你工作 然而,您是非常正确的,输入两行将是一个非常沉重的开销,并使用额外的空间似乎没有什么好的理由。更简单的是,您可以在数据库中设置另一列:
user_1
|user_2
|accept_code
|accepted
user_1
请求将user_2
添加为好友-您可以设置一个accept_code
在数据库中创建一个条目。将数据库结构设置为将accepted
列设置为define为false。然后,当第一次创建行时,用户当前不是朋友
用你的例子:鲍勃要求弗雷德做朋友。现在,您的DB将如下所示:
bob
|fred
|123123
|false
当user_2
输入accept_code
时,将accepted
更改为true
bob
|fred
|123123
|true
这样,一个查询将告诉您这两个用户是否是朋友,而不是两个查询来查看是否有两个匹配的DB条目
例如,bob将fred、joe和alex添加为朋友,fred和alex接受bob作为朋友,但joe没有。您的DB将如下所示:
user_1
|user_2
|accept_code
|accepted
bob
|fred
|123123
|true
bob
|joe
|321321
|false
bob
|alex
|789789
|true
例如,一个psuedo选择maybe,查找bob的所有朋友:
从user_1=“bob”和accepted=“true”之间的关系中选择user_2
结果将是:
fred
alex
根据评论更新:
数据库结构:
user_1
|user_2
|accept_code
|accepted
bob
|fred
|123
|true
bob
|alex
|123
|true
bob
|joe
|123
|false
ste
|bob
|123
|true
joe
|alex
|123
|true
选择语句:
从关系中选择*,其中accepted='true'和(user_1='current_user'或user_2='current_user')代码>
示例1-bob登录,他已请求朋友并被请求为朋友:
从关系中选择*,其中接受='true'和(用户_1='bob'或用户_2='bob')代码>
结果是:
bob
|fred
|123
|已接受
bob
|alex
|123
|已接受
ste
|bob
|123
|已接受
示例2-alex登录,他从未请求过和朋友,但被请求为朋友:
SELECT*FROM relationships,其中accepted='true'和(user_1='alex'或user_2='alex')代码>
结果是:
bob
|alex
|123
|已接受
joe
|alex
|123
|接受
示例3-joe登录后,他请求了一个朋友并拒绝了一个朋友:
从关系中选择*,其中接受='true'和(用户_1='joe'或用户_2='joe')代码>
结果是:
joe
|alex
|123
|接受的社交网络数据库关系可能会很快变得非常复杂,尤其是随着流量的增加和请求的涌入。在他们的开发者博客中,Facebook等领先来源提供了大量数据,说明他们如何修改和调整自己的系统,以随着流量的增加而扩展
没有一种正确的方法可以创建关系-这取决于您的代码结构-但是,可以说,执行两个查询以创建简单的一对一关系并复制数据被正确地认为是不必要的额外开销
您可以使用两个用户的ID创建一个简单的连接表,一个字段保存发起请求的用户(用户的int主键),另一个字段接收批准请求(也是int主键)
UserID|Name
1 Frank
2 John
RelationshipID|RequestedBy|Receipient|RequestStatus|ConfirmationCode
(primary key) 1 2 0 (however you format your url strings)
StatusIdentifier|StatusDefinition
0 Requested but not yet approved
-1 Requested and denied (mark for deletion)
1 Requested and approved (active friendship)
$sql = 'SELECT Recipient FROM FriendRelationships WHERE RequestedBy = 1 AND RequestStatus = 1';