簡體   English   中英

共同好友sql with join (Mysql)

[英]Mutual friends sql with join (Mysql)

我有兩張桌子

用戶表:

id|name

用戶關系

id | user_id | friend_id

並想獲得 2 個用戶的共同朋友的名字。 IE:

user_relationships
1 | 1 | 3
2 | 2 | 3  

users
3| sammy

用戶 1 和 2 有共同的朋友 3。我想在一次查詢中得到他的名字“sammy”。

我怎么做?

您需要將 user_relationships 與自己加入,以便具有不同user_id的兩行具有相同的friend_id

所有共同的朋友:

select ur1.user_id user1, 
       ur2.user_id user2, 
       ur2.friend_id mutual_friend
from   user_relationships ur1 
       JOIN user_relationships ur2 ON  ur1.friend_id = ur2.friend_id
where  ur1.user_id != ur2.user_id

加入用戶表以獲取名稱:

select ur1.user_id user_id1, 
        u1.name User1, 
       ur2.user_id user2, 
        u2.name User2,
       ur2.friend_id mutual_friend_id,
        u3.name mutual_friend
from user_relationships ur1 
     JOIN user_relationships ur2 ON  ur1.friend_id = ur2.friend_id
     JOIN user u1 ON u1.user_id = ur1.user_id
     JOIN user u2 ON u1.user_id = ur2.user_id
     JOIN user u3 ON ur1.user_id = u3.user_id
where ur1.user_id != ur2.user_id

您可以使用ur1.user_id = first_userur2.user_id = second_user過濾某些特定用戶的共同朋友

SELECT id, name
FROM users
WHERE id IN (
  SELECT friend_id
  FROM user_relationships
  WHERE user_id IN ( 1, 2 )
  GROUP BY friend_id
  HAVING COUNT(friend_id) >= 2
)

或一次加入:

SELECT friend_id, name
FROM user_relationships r
  INNER JOIN users u ON r.friend_id = u.id
WHERE user_id IN ( 1, 2 )
GROUP BY friend_id
HAVING COUNT(friend_id) >= 2

你可以嘗試這樣的事情:

select id, name from users where id in 
    (select friend_id from user_relationships where user_id = @user1_id and friend_id in 
        (select friend_id from user_relationships where user_id = @user2_id)
    )

這應該返回 ID 為 @user1_id 和 @user2_id 的用戶的所有共同朋友。 它尚未經過測試,但應該提供一個起點......

沒有檢查它,但這個查詢應該給你一個 ID [no] 的相關用戶名列表。

select u1.name, u2.name 
  from users as u1
  join user_relationships as ur
    on u1.id = ur.user_id
  join users as u2
    on ur.friend_id = u2.id
  where U1.id = [no];

順便說一句,您的交叉表不需要人工 id,因為 (user_id,friend_id) 已經是合法的主鍵。

暫無
暫無

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

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