2011-09-09 49 views
0

我有一個數據庫表,用戶名爲user_id,主鍵爲每個用戶。mysql查詢有助於在社交網站上找到共同朋友

我也有一個表叫朋友有兩個字段,user_id和friend_user_id。

user_id字段始終是兩個user_id中最低的,以避免重複條目。

假設我有兩個用戶,(可以說用戶ID 1和用戶ID 4,儘管他們可能是任何東西)。

如何返回用戶表中的所有行,以便與用戶1和用戶4成爲朋友的用戶(即共同朋友)?

回答

6

我會給你幾招:

  1. 找到用戶1
  2. 所有的朋友找到用戶的所有朋友2
  3. 他們相交,其結果將是共同的朋友。

就像這樣:

enter image description here

UPDATE:這裏的查詢:

select f.friend_user_id from friends f where f.friend_user_id in (
    select friend_user_id from friends where user_id=<id_of_user_a>) 
and f.user_id=<id_of_user_b> 

通過上面的查詢返回的ID將所有可在用戶的id user_a和user_b的共同朋友。如果你想得到關於這些用戶的所有細節(名稱等),那麼這樣做:

select f.friend_user_id,u.* from friends f inner join users u 
    on u.user_id=f.friend_user_id 
    where f.friend_user_id in (
    select friend_user_id from friends where user_id=<id_of_user_a>) 
    and f.user_id=<id_of_user_b> 
+0

哈哈伊卡洛斯 - 非常好。 – Chris

+0

嗯,這是很明顯,它只是SQL語法即時通訊掙扎,但感謝您的輸入 – geoffs3310

+0

@ geoffs3310這只是一個小小的玩笑;)看看克里斯的答案。 (雖然可以寫得更簡潔 - 他不需要那些內部連接) – Icarus

0
SELECT friends.friend_user_id FROM user, friends 
INNER JOIN friends ON friends.user_id = user.user_id 
WHERE user.user_id = 1 
    AND friend.friend_user_id 
      IN (SELECT friends.friend_user_id 
      FROM user, friends 
      INNER JOIN friends ON friends.user_id = user.user_id 
      WHERE user_id = 4)