SQL通过用户名从朋友表中获取朋友

时间:2014-10-08 15:17:09

标签: mysql sql relationship

好吧,我一直坚持使用桌面设计,我现在无法改变,我需要根据用户名从friends_relationship表中获取所有朋友

我现在拥有的:

select distinct(username) from members m
inner join members_friends f on f.id_memb_friend1 = m.id
where (f.id_memb_friend1 = 173 or f.id_memb_friend2 = 173)

成员表有列:id,username member_friends表有列,id,id_memb_friend1,id_memb_friend2

我发布的查询还会返回ID为173的成员的用户名,例如是Splendid。 我想要实现的是根据我提供的用户名(Splendid = id 173)将所有朋友与用户名一起使用。

更新

我希望得到这个:

输入:username = Splendid 行动:获得精彩朋友的用户名(连同他们的ID) 输出:

members.id = 5 username = John

members.id = 15 username = Lara

members.id = 66 username = Alex

依旧......

2 个答案:

答案 0 :(得分:0)

(已更新以适应评论中表达的新要求。) (更新以适应更新问题中表达的新要求。)

您的问题是否与您是否要根据用户名或用户ID进行搜索不一致。虽然您的查询使用id,但我根据澄清的要求使用用户名。我还假设您想要朋友'用户名(仅限)。此外,从您的初始查询中可以看出,您希望查看两个方向的关系(在friend1上匹配,在all2上显示所有friend2,在friend2上匹配,显示所有friend1)。

这是实现所有目标的一种方法:

select mm.id, mm.username
    from members mm
    inner join member_friends f on f.id_memb_friend1 = mm.id
    inner join members m on m.id = f.id_memb_friend2 
    where m.username = 'Splendid'
union distinct
select mm.id, mm.username
    from members mm
    inner join member_friends f on f.id_memb_friend2 = mm.id
    inner join members m on m.id = f.id_memb_friend1
    where m.username = 'Splendid'

答案 1 :(得分:0)

SELECT CASE f.id_memb_friend1 WHEN'173'THEN f.id_memb_friend2 ELSE f.id_memb_friend1 END AS MemberID,m。username FROM members_friends f内部联接成员m f.id_memb_friend1 = m.id或者f.id_memb_friend2 = m.id where(f.id_memb_friend1 = 173或f.id_memb_friend2 = 173)