2011-02-06 82 views
2

嗨IM試圖找出我如何能讓共同的朋友如何獲得共同朋友列表

我現在有問題想出來。

我有一個名爲「用戶」表,這是它的外觀

id | name 
----------- 
1 Kenny 
2 Jack 
3 Jimmy 
4 Chris 
5 Meg 
6 Jake 
7 Micheal 
8 Dude 

我稱之爲「友誼」 表,這是它的外觀

user_a | user_b 
---------------- 
4   1   
7   5 
8   1 
2   4 
2   1 
5   2 
1   6 
1   7 

USER_A發送USER_B成爲朋友的請求...... BAM有朋友。 現在,如果即時通訊用戶2,我去用戶1的朋友列表,我想看看我們有什麼共同的朋友。什麼是正確的SQL來做到這一點?

回答

2

假設用戶1不可能與用戶7成爲朋友兩次(意味着不能與user_a = 1, user_b=7和另一行user_a = 7, user_b = 1一行)。

SELECT IF(user_a = 1 OR user_a = 2, user_b, user_a) friend 
FROM friendship 
WHERE (user_a = 1 OR user_a = 2) OR (user_b = 1 OR user_b = 2) 
GROUP BY 1 
HAVING COUNT(*) > 1 
+0

這是一個有趣的觀點(假設用戶1不可能與用戶7成爲朋友兩次) - 我懷疑你實際上是否可以在後端執行該限制。可以做的最好的做法可能是讓user_a和user_b成爲一個複合唯一鍵。由於這是一個相關的問題,如果有人可以提出更好的解決方案(如果可用),那將會很棒。 – user183037 2011-02-06 03:38:59