2017-08-29 42 views
-1

我有一个场景,其中我将useremail存储在表user_info中。其结构如下。在同一张表中获取朋友列表信息

user_info(_id,email)

但一个用户可以是其他users.So的朋友为目的,我还有一个表user_friend。下面

user_friend(_id,userA , userB)

其结构给出现在假设有5个用户A,B,C,d和E.我们得到了表值这样的事情。

USER_INFO

_id  email 
1  [email protected]  
2  [email protected]  
3  [email protected]  
4  [email protected] 
5  [email protected]  

user_friends

_id userA userB 
1  1  2 
2  1  3 
3  1  4 
4  5  1 

它的平均A是B的朋友,C,d和E.我想要得到这些电子邮件,但我无法考虑任何适当的查询。 我正在使用左连接,但似乎不能正常工作

获得1(A @ ...)的好友。但它不能正常

SELECT DISTINCT email FROM user_info AS UI 
LEFT JOIN user_friends AS UF 
ON UI._id = UF.userA 
LEFT JOIN user_friends AS UF2 
ON UI._id = UF2.userB 
WHERE UF2.userA = '1' || UF2.userB ='1' 

工作有什么建议?

+0

这一个已经 – Strawberry

+0

好之前回答感谢您的回应,我找到了答案! –

回答

0

它会是这样的。

选择电子邮件从USER_INFO WHERE _id IN(从user_friends选择用户A,其中用户B = '1' 联盟中的所有选择用户B从那里用户A = '1' user_friends)

0

使用UNION让所有朋友的电子邮件

(SELECT 
    u2.email 
FROM user_info u 
LEFT JOIN user_friends f ON f.userA = u._id 
LEFT JOIN user_info u2 on u2._id = f.userB 
WHERE u._id = 1) 
UNION 
(SELECT 
    u2.email 
FROM user_info u 
LEFT JOIN user_friends f ON f.userB = u._id 
LEFT JOIN user_info u2 ON u2._id = f.userA 
WHERE u._id = 1) 
+0

嘿,我真的很感激你的答案,但我想我找到了一个更简单的。看看这个。 它会是这样的。 >从user_info中选择电子邮件WHERE _id IN(从user_friends中选择userA = userA的userA)联盟所有从user_friends中选择userB,其中userA ='1') –