2014-11-02 139 views
0

我有两个表:members和member_requests。当成员向好友请求发送另一个成员时,会将一行插入到member_requests表中。如果收件人接受请求,则状态更新为1.如果某人拒绝该请求,该请求将被删除。我已经尝试了许多不同的查询来为特定用户生成一个朋友列表,但没有一个似乎能正常工作。请求的author_id必须是当前成员的id,或者接收者id必须是当前成员的id。有人可以提供一个查询,可以做到这一点?如何根据好友请求的状态使用MySQL获取好友列表?

http://sqlfiddle.com/#!2/021d7/13

    SELECT 
         r.request_id, r.author_id, r.recipient_id, r.status, 
         m.member_id, m.display_name 
        FROM member_requests AS r 
        LEFT JOIN members AS m ON (r.author_id = m.member_id OR r.recipient_id = m.member_id) 
        WHERE r.status = 1 
        ORDER BY m.display_name 
+0

你尝试过使用'NOT IN'条件吗?类似于'SELECT * FROM成员朋友的朋友WHERE friend_id NOT IN(SELECT成员的直接朋友)'? – 2014-11-02 00:37:48

+0

如果您在编辑之前看到我的文章,请再阅读一次。我意识到,我所拥有的查询实际上并不是朋友,而是所有成员。 – ShoeLace1291 2014-11-02 00:43:54

+0

所以,如果我理解正确(在您编辑之后) - 您想获得某个成员的所有当前朋友的列表?那是 - 包含“我”(作为作者或作为友谊的接受者)并且具有“1”状态的所有请求的列表? – 2014-11-02 00:48:41

回答

1

这听起来不太坏。你可以做的是获得用户发送请求并被接受的所有时间的列表,以及用户收到请求并被接受的所有时间的列表,并将这两个结果联合在一起。

试试这个:

(SELECT recipient_id 
FROM member_requests 
WHERE author_id = 1 AND status = 1) 
UNION 
(SELECT author_id 
FROM member_requests 
WHERE recipient_id = 1 AND status = 1); 

这是你的SQL Fiddle回来。

+0

谢谢!我将发布另一个关于通过不是现有会员的朋友的成员进行搜索的问题......如果您想要一些快速回复......大声笑。 – ShoeLace1291 2014-11-02 01:16:45