2011-10-14 157 views
3

我想我的朋友以及朋友的朋友,但僅限於二度朋友如何讓我的朋友和朋友的朋友?

我的表結構是這樣的

user_id friend_user_id 
1   2 
1   4 
2   3 
2   4 
2   5 
3   7 

我需要的是,如果我的用戶ID '1'然後我想我所有的直接朋友(在這種情況下2 & 4)和user_is 2有一些朋友(3,4,5)和預期的結果是2,3,4,5

我怎麼能懂嗎?

+0

jquery在哪裏? –

+0

我看不到你的問題與jQuery有什麼關係,所以我刪除了標籤。如果您認爲jQuery與您的問題有關,請通過一切手段編輯您的問題,以解釋與jQuery的連接並重新添加標籤。 –

+1

@Andy E對不起,當我選擇「查詢」標記時,意外地選擇了「jquery」標記..感謝編輯.. – Vijay

回答

3

使用聯盟和內部連接:

select friend_user_id from friends 
where user_id = ? 
union 
select f2.friend_user_id from friends f1 
join friends f2 on f2.user_id = f1.friend_user_id 
where f1.user_id = ? 

這應該表現非常好(比使用一個子選擇反正好多了)。

+0

?如果mysql優化器是值得的,那麼子查詢應該被重寫爲您的查詢,並且它們應該執行相同的操作。這不是一個相關的子查詢,所以推下來非常簡單。 –

+0

其實,我認爲你是正確的:我很確定mysql自動將子查詢版本轉換爲連接版本 – Bohemian

2
SELECT friend_user_id FROM friends WHERE user_id = 1 
UNION 
SELECT friend_user_id FROM friends WHERE user_id IN (SELECT friend_user_id FROM friends WHERE user_id = 1) 

這會給你一個與朋友的朋友和ID爲1的用戶的朋友,刪除重複項。通過使用IN子句嵌套查詢,您可以輕鬆地擴展第3個,第4個等。

3
SELECT friend_user_id 
FROM table 
WHERE user_id = 1 OR user_id IN (SELECT friend_user_id FROM table WHERE user_id = 1)