拥有用户表,任何用户都可以与其他用户建立友谊。所以,
UserTable
-----------
User1
User2
User3
FriendshipTable
-----------
User1, User3
User2, User5
User3, User5
User5, User9
第1部分:我正在寻找一种方法来获取完整的朋友,朋友的朋友等。例如,User1将返回:User1,User5,User2,User9
第2部分:如果我能够获得最大人口网络的规模,那将是有用的但不是必要的
或者,是否有更好的方法来存储用户之间的连接,这样可以更轻松地提取我需要的信息?就像在建立友谊时建立和合并友谊小组列表一样?
我在这里发现了一些类似的帖子,但是它们似乎都没有跟随网络超越第一层次。
我想那里有解决方案,但我甚至不知道要搜索什么。
答案 0 :(得分:0)
CTE是这里的方式(但如果你想在朋友之间获得大量的分离度,你需要小心MAXRECURSION)。在您的情况下,UserTable实际上是无关紧要的。你关心的只是关系表(FriendshipTable)。
CREATE TABLE #UserFriendship (User1 VARCHAR(20), User2 VARCHAR(20))
INSERT #UserFriendship VALUES ('A', 'B')
INSERT #UserFriendship VALUES ('B', 'C')
;WITH friends AS
(
SELECT User1, User2
FROM #UserFriendship
UNION ALL
SELECT friends.User1, child.User2
FROM friends
JOIN #UserFriendship child ON
friends.User2 = child.User1
)
SELECT * FROM friends