2011-12-22 49 views
-1

我已经制作了一个数据库结构,用户可以在它们之间建立“朋友连接”,就像在Facebook上一样。
每个用户都可以将文本保存到tbl_Statuses表中,只有他们的朋友才能看到此消息。
但我有麻烦SQL :(
在数据库中的朋友之间获取消息

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

我'试图让状态:
- 我写
- 我的朋友写

我曾尝试东西,但我不能数字:(

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

你有什么奇怪的?你期望看到什么,你看到了什么?您可以尝试将f。*添加到可能解决问题的选择标准中,如果问题是您没有看到数据。 – Robert 2011-12-22 21:14:15

+0

你的预期结果是什么?你想要一个可以看到状态的朋友列表吗? – Lamak 2011-12-22 21:17:12

+0

我更新了问题。基本上我需要从我和我的所有朋友写的tbl_Statuses中获得一切。 – 1110 2011-12-22 21:18:25

回答

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列中,所以对于此查询,我还添加:...或UserId IN(SELECT UserId FROM tbl_Friends WHERE FriendId = 1 ...) – 1110 2011-12-22 21:33:37

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