3

我一直在试图弄清楚如何做到这一点,即使查看其他示例,我也无法弄清楚,所以也许我可以获得一些个性化的帮助。

我有两张桌子,users_statusfriendships

users_status表中,我有一个字段userid,还有其他几个。在friendships表中,我有字段request_torequest_fromfriendship_status

基本上我想要做的是获取当前用户和当前用户朋友的所有状态帖子(我可以在我的 PHP 中使用 $userid 变量指定)。

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为and设置两个单独的表会更好friendships吗?如果是这样,我将如何构建/管理friendships表格?

4

2 回答 2

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

于 2011-10-06T02:08:31.017 回答
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 个选择

于 2011-10-06T02:35:45.530 回答