UserRelations{UserID, FriendID, RelationStatus}
还有ID为1,2,3等的用户 用户1向用户2发送请求 用户3向用户1发送请求 所以在数据库中我有:
1 | 2 | 1
和
3 | 1 | 1
现在我有点混淆写查询(也许设计错了) 我需要根据userID获取所有朋友的列表。但是,如果用户需要关系或者有人向他请求关系,则用户可以分为两列 如果我使用此查询,我会收到所有请求我关系的用户,但是我得到了一个用户列表,我已经发送了关系请求,但我得到的个人资料数据库是我的,而不是来自该用户。
select ur.*, p.FirstName, p.LastName
from userRelations ur
join Profiles p on ur.UserId = p.UserId
where ur.FriendId = @UserId or
ur.UserId = @UserId
答案 0 :(得分:2)
我认为您错过了FriendId
上的个人资料加入:
select ur.*, p1.FirstName, p1.LastName, p2.FirstName, p2.LastName
from userRelations ur
join Profiles p1 on ur.UserId = p1.UserId
join Profiles p2 on ur.FriendId = p2.UserId
where ur.FriendId = @UserId or ur.UserId = @UserId
答案 1 :(得分:1)
您需要使用 UNION 查询来让朋友双向前进,而不是在WHERE子句中使用OR运算符,如下所示:
select -- Get people you friended.
ur.UserID -- ME (i.e. the @User)
, ur.FriendID -- The other person.
, ur.RelationStatus
, p.FirstName
, p.LastName
from userRelations ur
inner join Profiles p on ur.FriendId = p.UserId
where ur.UserId = @UserId
--
union all
--
select -- Get people who friended you.
ur.FriendID -- ME (i.e. the @User)
, ur.UserID -- The other person.
, ur.RelationStatus
, p.FirstName
, p.LastName
from userRelations ur
inner join Profiles p on ur.UserId = p.UserId
where ur.FriendId = @UserId
注意每个选择中的列,连接和每个where子句如何更改以反映UNION每一半友谊方向的视角。