2011-12-22 74 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 
相關問題