2011-10-24 8 views
1

私は3つのテーブルを持っている:あなたは、各ユーザーを見ることができるので、参加し、可能なサブクエリ

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 

OK:user、「user_friends」と「blog_postは」

スキーマは次のようになります。ブログ投稿をしました。ユーザーには「友達」があります。私がやりたいことは、各ユーザーの友人のブログ記事を表示することです。

私はJimsの友達の投稿を見たいと思うなら、それはmaryのtest_2の投稿を表示するはずです。 maryの友達の投稿を見たい場合は、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; 
関連する問題