查找用户的朋友

时间:2016-04-14 21:16:24

标签: mysql sql

enter image description here

我有一个包含不同字段的用户表:id,firstname,name。 我有一个名为friend的表,其中包含不同的字段:invite_id,friend_sender(用户的id),friend_receiver(用户的id),validity(boolean)。

我正在用

填充好友表
1, 1, 2, 0;
2, 3, 1, 1;
3, 1, 5, 1;

让我们想象一下我是用户1,我想找到我所有的朋友。我可以是发送朋友邀请(发件人)或收件人(收件人)的人。当接收者接受邀请时,关系的有效性设置为1.例如,我不是用户2的朋友,因为他没有接受。

我应该通过用户1进行查询得到的结果是:

3, firstnameofuser3, nameofuser3
5, firstnameofuser3, nameofuser3

我尝试了一些SQL东西,使用双JOIN,重命名表以避免“双相同表”问题......但我无法弄明白。

我发现了一些关于它的帖子,但对于更复杂的事情,比如这里: Finding mutual friend sql

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我知道已有答案,但我的独特之处我有一个小提琴! ;)

SELECT
id,
firstname,
name
FROM
user
WHERE id IN
(
  SELECT
  CASE WHEN friend_sender = 1 THEN friend_receiver ELSE friend_sender END
  FROM friend
  WHERE
  (friend_sender = 1 OR friend_receiver = 1)
  AND
  validity = 1
)

小提琴: http://sqlfiddle.com/#!9/d8f55a/1

答案 1 :(得分:0)

试试这个:

SELECT u.*
FROM user u
WHERE u.id IN (
    SELECT f.friend_sender
    FROM friend f
    WHERE f.friend_receiver = 2 -- My fixed ID about Jin Jey
    UNION 
    SELECT f.friend_receiver
    FROM friend f
    WHERE f.friend_sender = 2 AND f.validity = 1)

我使用了UNION,因为你可以查询两组数据并合并它。

我修正了ID(2),因为在您的请求中,您想要了解所有关于Jin Jey的朋友

答案 2 :(得分:0)

您可以尝试以下查询

select 
    id,
    firstname, 
    name
from
    user inner join friend
    on
        (friend_sender=1 or friend_receiver=1 )and validity=1
        and 
    user.id=
    (case 
        when friend_sender=1 then friend_receiver
        else friend_sender
    end)

demo link here