【发布时间】:2011-06-08 02:57:13
【问题描述】:
我想在我的在线游戏中创建一个好友列表。我不确定如何设置或从哪里开始。添加朋友和接受朋友部分我可以处理,但我不知道如何在mysql和php中设置它。连接到每个用户或其他东西的用户(朋友)列表?
【问题讨论】:
标签: php mysql database database-design
我想在我的在线游戏中创建一个好友列表。我不确定如何设置或从哪里开始。添加朋友和接受朋友部分我可以处理,但我不知道如何在mysql和php中设置它。连接到每个用户或其他东西的用户(朋友)列表?
【问题讨论】:
标签: php mysql database database-design
如果您的友谊关系是对称的,您可以将每一对存储在单独的记录中:
friend1 friend2
A B
B A
A C
B D
C B
D B
然后像这样查询B的所有朋友:
SELECT friend2
FROM friends
WHERE friend1 = 'B'
或将id 最小的用户存储在第一个字段中,将id 最大的用户存储在第二个字段中:
friend1 friend2
A B
A C
B D
然后这样查询B的朋友:
SELECT friend1
FROM friends
WHERE friend2 = 'B'
UNION ALL
SELECT friend2
FROM friends
WHERE friend1 = 'B'
第一个选项在MySQL 中效率更高一些,如果您的友谊关系不对称(如LiveJournal),这是唯一的选项
见这篇文章:
【讨论】:
CREATE TABLE friendship(a INT NOT NULL REFERENCES users, b INT NOT NULL REFERENCES users, PRIMARY KEY (a, b))
友谊本质上是两个人之间的相互关系。在数据库术语中,它是两个用户之间的多对多关系。
因此,您需要一个链接表,其中包含按 ID 对两个用户的引用。
用户表
ID Username
1 Bob
2 Jim
3 Alice
朋友桌
user1 user2
1 2
2 3
这将使 Bob 成为 Jim 的朋友,Jim 成为 Alice 的朋友。
【讨论】:
在 stackoverflow 上的其他帖子中查看答案...一些简单但很好的解释来完成您需要的。
【讨论】:
另一种方法是将 A 列设置如下: $checkfriend = (($friend1 $friend2) || ($friend2 $friend1))
B 列如下: (接受友谊或拒绝友谊)基于用户的选择
基本上user1和user2都在同一列。
【讨论】: