我正在网站上工作,我正在实施一个朋友系统。人们可以成为朋友,这将解锁一些不重要的东西。它用PHP编码,MySQL作为数据库。
让我们说这是我的帐户表
id | name | picture
0 | Jorik | Cat.jpg
1 | Joost | Fish.jpg
2 | Henk | Ferret.png
这是朋友表(这是一个很好的方法吗?)
id | user id | friend id | invite date | accepted
0 | 0 | 1 | 123 | 0
1 | 2 | 0 | 456 | 1
2 | 1 | 2 | 123 | 1
我检查他们是否是朋友的方式如下(可能是错误,但你明白了。)
$ fid =朋友ID,$ uid =用户ID。
WHERE ( (`userid` = '{$uid}' && `friendid` = '{fid}' ) || (`friendid` = '{$uid}' && `userid` = '{$fid}' ))
首先,这是一种有效的方法,还是有更好的方法?
如果我想获取用户拥有的朋友列表,我可以运行此查询
WHERE (`userid` = '{$uid}' || `friendid` = '{$uid}')
现在如果我为用户0运行此查询,它将返回
id | user id | friend id | invite date | accepted
0 | 0 | 1 | 123 | 0
1 | 2 | 0 | 456 | 1
之前我曾使用过MySQL连接,但我无法弄清楚如何返回类似以下结果的内容
id | friend id | invite date | accepted | Name | Picture
0 | 1 | 123 | 0 | Joost | Fish.jpg
1 | 2 | 456 | 1 | Jorik | Ferret.png
它必须检查它是否应该加入朋友ID或来自帐户表的id的用户ID。 (被邀请的人是朋友ID,邀请他的人将获得用户ID。)
我希望我提供了足够的信息。
任何人都可以帮我吗?
提前致谢,
Jorik
答案 0 :(得分:0)
如果我理解你的问题,这样的事情可能有用:
SELECT a.user_id as orig_user_id, f.*, ab.*
FROM account a
JOIN friends f
ON f.user_id=a.id
JOIN account ab
ON f.friend_id=ab.user_id
WHERE a.id={$uid}
我没有测试过这个sql,但是你得到了这张照片。基本上,为您要查找其朋友的用户选择行,然后加入他们的朋友行,然后为他们的朋友加入用户帐户行。您可能需要为某些列名称添加别名,以便在代码中明确说明。您将有重复项,因为您要加倍加入帐户表。
答案 1 :(得分:0)
我的0.02美元:
1)规范化您的数据:摆脱'userid'或'id'。您只需要一个唯一的帐户列。
2)为“朋友”制作一张桌子,如下所示:
(约) create table Friends(UserId int unsigned,FriendUserId int unsigned,index(UserId,FriendUserId));
然后为每个'朋友'添加一行,其中'FriendUserId'是每个人的帐户ID(请参阅#1)。
3)为“邀请”制作一个表格如下: (APPX) create table Invites(UserId int unsigned,FriendId int unsigned,InviteDate datetime default timestamp,Accepted tinyint(1)default 0,primary key(UserId,FriendId));
为每个邀请添加一行,并在接受时接受更新。
现在要找个朋友:
从帐户中选择*加入朋友f a.UserId = f.UserId其中a.UserId =;
获取邀请:
从帐户中选择*加入邀请i on a.UserId = i.UserId
等等......
..但比什么都重要..避免重复数据..