2017-05-04 125 views
0

我有这样SQL选择在哪里

UserFriends 
Id  UserId  RequestId  Status 
1   1    2    1 
2   1    3    1 
3   1    4    0 
4   3    2    1 
5   3    4    1 

基本表的结构,如果状态不是别人接受0请求1所接受和他们是朋友

我试图做到让用户2个朋友我能怎么做 ?

重要编辑: 我想获取用户3的朋友。你知道如果用户1添加了用户3他们是朋友并且用户3他们添加了2和4他们的朋友(用户3朋友必须返回1,2和4这是基本的解释)

+0

是'RequestId'谁提出请求的用户的'UserId'?因为如果是这样,他已经有两个朋友('Id = 1'和'Id = 4') –

+0

我的问题是在这里用户1添加用户2和状态1在第一行,但我不想再添加此记录像添加用户2用户1和状态1 – Volkan

+0

用户ıd向requestid发出请求 – Volkan

回答

3

如果我阅读正确,通过用户邀请其他用户或由其他用户邀请该用户,并且在这两种情况下该请求都被接受。如果是的话,那么下面的UNION查询应该产生预期的结果:

SELECT RequestId 
FROM UserFriends 
WHERE UserId = 3 AND Status = 1 
UNION 
SELECT UserId 
FROM UserFriends 
WHERE RequestId = 3 AND Status = 1 

我在这里使用一个UNION因为给定的用户可能出现的朋友不止一次如果对用户邀请对方更多,或者如果邀请不止一次发送。我假设你不想多次报告同一个用户作为朋友。

输出:

enter image description here

演示在这里:

Rextester

+0

我这样做也许是一分钟前:)。无论如何,这是正确的答案谢谢你的努力和时间:) – Volkan