簡體   English   中英

SQL獲取用戶的朋友和朋友的朋友

[英]SQL to get friends AND friends of friends of a user

我的MySQL表結構是這樣的。

USER
int id
varchar username

FRIEND_LIST
int user_id
int friend_id

對於每個朋友關系,我在FRIEND_LIST中插入2條記錄。 如果用戶1是用戶2的朋友,則將下一行插入FRIEND_LIST

1,2
2,1

我想結識特定用戶的朋友和朋友的朋友。

選擇應返回列a,b,c。

a: user_id
b: friend_id
c: username (username of friend_id )

If 1 is friend of 2 and 3.
2 is friend of 3, 4 and 5
3 is friend of 5,6,7

然后獲取1的朋友和朋友的朋友的查詢應返回:

1 2 two
1 3 three
2 1 one
2 3 three
2 4 four
2 5 five
3 1 one
3 5 five
3 6 six
3 7 seven

我可以通過一個查詢獲得這些行嗎?

更新答案:我對DVK的答案做了一些修改,這是返回我所要查找內容的查詢。

SELECT friends.user_id, friends.friend_id, username

FROM
      FRIEND_LIST friends, USER

WHERE
      CAT_USER.id = friends.friend_id
AND
      friends.user_id = 1

UNION

SELECT
        fof.user_id, fof.friend_id, username
FROM
        FRIEND_LIST friends, FRIEND_LIST fof, USER
WHERE
        USER.id = fof.friend_id
 AND
        friends.friend_id = fof.user_id
 AND
        friends.user_id = 1;
SELECT f1.user_id, f1.friend_id FROM
friends_info f1
WHERE f1.user_id = 1 OR
f1.user_id IN
(
 select f2.friend_id
 from friends_info f2
 where f2.user_id = 1
)
 ORDER BY user_id

這效率較低,但可讀性強:

SELECT friends.user_id, friends.friend_id, username 
FROM FRIEND_LIST friends, USER
WHERE USER.id           = friends.friend_id
 AND  USER.id = 1
UNION

SELECT USER.user_id, fof.friend_id, username 
FROM FRIEND_LIST friends, FRIEND_LIST fof, USER
WHERE USER.id           = fof.friend_id
 AND  friends.friend_id = fof.user_id
 AND  USER.id = 1

要么

SELECT user_id, f_fof.friend_id, username 
FROM USER, (
    SELECT f.user_id, f.friend_id
    FROM   FRIEND_LIST f
    WHERE  user_id = 1
    UNION
    SELECT f.user_id, fof.friend_id
    FROM   FRIEND_LIST f, FRIEND_LIST fof
    WHERE  user_id = 1
     AND   f.friend_id = fof.user_id
) as f_fof
WHERE USER.id           = f_fof.friend_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM