2011-12-22 10 views
-1

私は、ユーザーがFacebookのようにそれらの間に "友人のつながり"を作ることができるデータベース構造を作っています。
すべてのユーザーはtbl_Statusesテーブルにテキストを保存でき、友だちだけがこのメッセージを見ることができます。
しかし、私はSQL :(
データベース内の友人同士のメッセージを取得

tbl_Friends{UserId, FriendId, Accepted} 
tbl_Statuses{StatusId, Text, UserId} 

I'amは、ステータス取得しようとのトラブルを持っている:
を - 私は
を書くこと - 私の友人は、私が試してみました

を書くこと何か私は理解できません:(

select s.* 
from tbl_Statuses s left join tbl_Friends f on s.userId = f.UserId 
where s.userId = f.UserId 
+2

何が奇妙ですか?あなたは何を見たいと思っていますか、あなたは何を見ますか?問題がデータを表示していない場合は、問題を解決する可能性のある選択基準にf。*を追加してみることができます。 – Robert

+0

あなたの期待する結果は?あなたはステータスを見ることができる友人のリストが欲しいですか? – Lamak

+0

私は質問を更新しました。基本的に私と私のすべての友達が書いたtbl_Statusesからすべてを得る必要があります。 – 1110

答えて

2
SELECT * 
FROM tbl_Statuses 
WHERE UserId = @MyUserId 
OR UserId IN (SELECT FriendId FROM tbl_Friends WHERE UserId = @MyUserId AND Accepted = 1) 
+0

ありがとうございます。誰かが似たようなものを作ったら、追加するだけです。友人の要求を送信するユーザーによって異なります。userIdは時にはUserID列にある場合もあればFriendID列にある場合もありますので、このクエリに追加してください:... OR UserId IN(SELECT UserId FROM tbl_Friends where FriendId = 1 ...) – 1110

0
-- What you say 
SELECT * 
    FROM tbl_StatuseS 
WHERE UserId = @userId 
union 
-- What your friends say 
SELECT s.* 
    FROM tbl_Friends f 
    join tbl_Statuses s on s.userId = f.FriendId 
WHERE f.UserId = @userId 
    and f.Accepted = 1 
関連する問題