2011-10-24 54 views
1

我有3個表:user,「user_friends」和「blog_post」加入和可能的子查詢

的模式是類似以下內容:

user 
id | username 
------------------- 
1  | jim 
------------------- 
2  | mary 
------------------- 
3  | george 
------------------- 
4  | julie 



user_friends 
user_id | friend_id 
---------------------- 
1   | 2 
---------------------- 
2   | 3 
---------------------- 
2   | 4 


blog_posts 
id | title | user_id 
------------------------------ 
1  | test_1 | 1 
------------------------------ 
2  | test_2 | 2 
------------------------------ 
3  | test_3 | 3 
------------------------------ 
4  | test_4 | 4 

好了,你可以看到每個用戶已經發了一篇博文。用戶有'朋友'。我正在尋找的是顯示每個用戶的朋友博客文章。

所以,如果我想看吉姆的朋友帖子,它應該顯示瑪麗的帖子test_2。如果我想看到瑪麗的朋友帖子,它應該顯示喬治和朱莉的帖子test_3和test_4

有沒有一個簡單的方法做到這一點?我可以使用子選擇嗎?

非常感謝

回答

2

是的,你可以使用子選擇。 像這樣的東西應該工作:

SELECT * FROM blog_posts WHERE user_id in 
(SELECT friend_id FROM user_friend WHERE user_id=1) 
+0

工作就像魅力!我知道我在正確的軌道上!謝謝 – terrid25

0
Select * 
From blog_posts 
Where user_id in 
    (Select friend_id 
    From user_friends 
    where user_id = 1); 

末數量可以是任何用戶ID,你正在尋找。

2

可能是那樣簡單(變型與JOIN):

SELECT bp.* 
FROM user_friends uf 
JOIN blob_posts bp ON bp.user_id = uf.friend_id 
WHERE uf.user_id = my_id 
+1

+ 1使用連接而不是'IN' /子查詢。 –

0

您可以使用

SELECT * FROM blog_posts WHERE user_id IN (
SELECT friend_id FROM user_friends WHERE user_id = X) 
0
SELECT bp.* 
FROM blog_posts bp 
INNER JOIN user_friends uf ON bp.user_id = uf.friend_id 
INNER JOIN user u ON u.id = uf.user_id 
WHERE u.username = "jim" 
0

嘗試這個請求:

SELECT bp.title 
FROM blog_posts bp 
JOIN user_friends uf ON (bp.user_id = uf.friend_id) 
WHERE uf.user_id = 1;