我一直试图弄清楚如何做到这一点,即使查看其他例子,我也无法理解,所以也许我可以得到一些个性化的帮助。
我有两张桌子,users_status
和friendships
。
在users_status
表格中,我有一个字段userid
和其他几个字段。
在friendships
表格中,我有字段request_to
,request_from
和friendship_status
。
基本上我想要做的是获取当前用户的所有状态帖子以及当前用户的朋友(我可以使用$ userid变量在我的PHP中指定)。
以下是friendships
表结构的示例。当发送好友请求时,发送者和接收者的用户ID被放在表中,friendship_status为0.当请求被接受时,friendship_status被设置为1,而这两个现在是朋友。
friendship_id request_from request_to friendship_status
1 111248 111249 1
2 111209 111249 1
3 111209 111248 0
11 111209 111259 1
5 111252 111209 1
12 111261 111209 1
我意识到这甚至可能不是确定友谊的最佳结构,特别是因为该网站是基于关系的,并且必须检查友情关系将是一个经常使用的东西。
为friend_requests
和friendships
设置两个单独的表可能会更好吗?如果是这样,我将如何构建/管理friendships
表?
答案 0 :(得分:4)
您可以使用表格连接(例如http://dev.mysql.com/doc/refman/5.0/en/join.html)来查找所有请求。
实际上你可以在这里使用子查询:
SELECT * FROM users_status WHERE userid = "$userid"
OR userid in (SELECT request_to FROM friendships where request_from = "$userid" AND friendship_status = 1)
OR userid in (SELECT request_from FROM friendships where request_to = "$userid" AND friendship_status = 1)
将$userid
替换为您的用户ID
答案 1 :(得分:3)
我能想到的最简单的架构是:
PENDING_FRIENDSHIPS(request_from, request_to)
FRIENDSHIPS(request_from, request_to)
我还删除了ID,因为两个表上的两个字段都是复合主键(request_from,request_to)。
要让当前用户的所有朋友运行:
select * from friendships
where $currentUser = request_from OR $currentUser = request_to
这将返回两列,您必须在PHP中删除当前用户。
从此架构中获取所有朋友的另一种方法是运行UNION:
select request_from from friendships
where request_to = $currentUser
UNION
select request_to from friendships
where request_from = $currentUser
此解决方案的缺点是您正在运行2个选择