我想我的朋友以及朋友的朋友,但僅限於二度朋友如何讓我的朋友和朋友的朋友?
我的表結構是這樣的
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
我怎麼能懂嗎?
我想我的朋友以及朋友的朋友,但僅限於二度朋友如何讓我的朋友和朋友的朋友?
我的表結構是這樣的
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
我怎麼能懂嗎?
使用聯盟和內部連接:
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 = ?
這應該表現非常好(比使用一個子選擇反正好多了)。
?如果mysql優化器是值得的,那麼子查詢應該被重寫爲您的查詢,並且它們應該執行相同的操作。這不是一個相關的子查詢,所以推下來非常簡單。 –
其實,我認爲你是正確的:我很確定mysql自動將子查詢版本轉換爲連接版本 – Bohemian
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個等。
SELECT friend_user_id
FROM table
WHERE user_id = 1 OR user_id IN (SELECT friend_user_id FROM table WHERE user_id = 1)
jquery在哪裏? –
我看不到你的問題與jQuery有什麼關係,所以我刪除了標籤。如果您認爲jQuery與您的問題有關,請通過一切手段編輯您的問題,以解釋與jQuery的連接並重新添加標籤。 –
@Andy E對不起,當我選擇「查詢」標記時,意外地選擇了「jquery」標記..感謝編輯.. – Vijay