Php 在mysql中设置好友列表
我想在我的在线游戏中建立一个朋友列表。我不知道如何设置或从哪里开始。添加朋友和接受朋友部分我可以处理,但我不知道如何在mysql和php中设置它。连接到每个用户或某物的用户(朋友)列表?如果您的友谊关系是对称的,您可以将每一对存储在单独的记录中:Php 在mysql中设置好友列表,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我想在我的在线游戏中建立一个朋友列表。我不知道如何设置或从哪里开始。添加朋友和接受朋友部分我可以处理,但我不知道如何在mysql和php中设置它。连接到每个用户或某物的用户(朋友)列表?如果您的友谊关系是对称的,您可以将每一对存储在单独的记录中: friend1 friend2 A B B A A C B D C B D B 然后像这样查询所有B的朋友: SELECT friend2 FROM friends WH
friend1 friend2
A B
B A
A C
B D
C B
D B
然后像这样查询所有B
的朋友:
SELECT friend2
FROM friends
WHERE friend1 = 'B'
SELECT friend1
FROM friends
WHERE friend2 = 'B'
UNION ALL
SELECT friend2
FROM friends
WHERE friend1 = 'B'
或者在第一个字段中存储id最小的用户,在第二个字段中存储id最大的用户:
friend1 friend2
A B
A C
B D
然后像这样查询B
的朋友:
SELECT friend2
FROM friends
WHERE friend1 = 'B'
SELECT friend1
FROM friends
WHERE friend2 = 'B'
UNION ALL
SELECT friend2
FROM friends
WHERE friend1 = 'B'
在MySQL
中,第一个选项的效率稍微高一点,如果您的友谊关系不是对称的,这是唯一的选项(如LiveJournal
)
见本文:
- 友谊本质上是两个人之间的相互关系。就数据库而言,这是两个用户之间的多对多关系
所以,您需要的是一个链接表,它通过ID保存对两个用户的引用
例子
用户表
ID Username
1 Bob
2 Jim
3 Alice
朋友桌
user1 user2
1 2
2 3
这将使鲍勃成为吉姆的朋友,吉姆也成为爱丽丝的朋友。在stackoverflow上的另一篇文章中查看答案……一些简单但很好的解释可以帮助你完成你所需要的
另一种选择是将A列设置为如下所示: $checkfriend=($friend1$friend2)| |($friend2$friend1)) B栏如下: (接受友谊或拒绝友谊)根据用户选择
基本上,user1和user2都在同一列中。Hi@robinjam!我只是想和你核实一下。如果我的朋友列表是对称的,它应该是这样的:如果1是2的朋友,那么2是1的朋友。在表中为其关系创建两行条目。谢谢Mike Sanchez:Friends表是对相互友谊的建模,所以每个友谊需要1行,而不是每人1行。我打算在php+mysql环境中尝试使用这种设置。如果我错了,请纠正我,但在你这样的设置下,我将不得不使用UNION。与在表中创建两个条目不同,我可以只使用一个WHERE user1=“1”语句。你能打开一个新问题而不是发表评论吗?你需要在关系表上分配一个主键吗?@Mike:当然可以,这样可以消除重复项并加快搜索速度。关系表本身也可以有属性(比如建立友谊的日期等)。若我理解正确,你们说的是复合主键,对吗?主键和外键都引用回“用户”表。@MikeSanchez:
创建表友谊(a INT NOT NULL引用用户,b INT NOT NULL引用用户,主键(a,b))