【问题标题】:Getting Friend list having information in same table获取在同一张表中包含信息的好友列表
【发布时间】:2017-08-29 05:55:29
【问题描述】:

我有一个场景,我将useremail 存储在表user_info 中。其结构如下。

user_info(_id,email)

但是,一个用户可以成为其他用户的朋友。因此,为此我有另一张桌子 user_friend。其结构如下所示

user_friend(_id,userA , userB)

现在假设有 5 个用户 A、B、C、D 和 E。我们得到了类似这样的表值。

用户信息

_id      email  
 1       A@...      
 2       B@...       
 3       C@...       
 4       D@...
 5       E@...       

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'

有什么建议吗?

【问题讨论】:

  • 这个之前已经回答过了
  • 嗯,感谢您的回复,我找到了答案!

标签: php mysql sql join left-join


【解决方案1】:

使用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)

【讨论】:

  • 嘿,我非常感谢您的回答,但我想我找到了一个更简单的答案。看看这个。会是这样的。 > SELECT email from user_info WHERE _id IN (select userA from user_friends where userB = '1' Union All select userB from user_friends where userA = '1')
【解决方案2】:

会是这样的。

SELECT email from user_info WHERE _id IN (select userA from user_friends where userB = '1' Union All select userB from user_friends where userA = '1')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2014-11-15
    相关资源
    最近更新 更多