c# - 选择n级连接度内的所有用户

标签 c# sql social-networking

该表由 user1、user2、connectionStrength 列组成,示例记录如下:

A,B,0.2
A,C,0.5
A,G,0.1
B,C,0.8
W,Q,0.4
G,Q,0.5

我想为所选用户检索在定义的连接度内的所有用户,然后绘制连接图。然而,问题是如何从表中选择满足条件的所有记录。例如,如果选择用户 A 并将度设置为 2,则应选择示例中的以下记录:

A,B,0.2
A,C,0.5
A,G,0.1
B,C,0.8
G,Q,0.5

上面的例子是假设的。实际上,我工作的数据库中有超过 200M 的连接,目前我使用 C# 和 Microsoft SQL Server 2008 进行分析。

有谁知道如何编写一个函数 (string GetQuery(string selectedUser, int degreeOfConnection)) 来组成一个查询,该查询返回满足条件(所选用户的连接度)的所有记录?

编辑#1

我尝试通过以下方式执行递归查询来获取连接:

WITH user_connections(user1, user2, link_strength, Level)
AS
(
SELECT user1, user2, link_strength, 0 AS Level FROM [dbo].[monthly_connections] AS mc WHERE user1 = '1ADF1126F26B4AD4441A3C552FCE04A4F7A79760'
UNION ALL
SELECT mc.user1, mc.user2, mc.link_strength, Level + 1 FROM [dbo].[monthly_connections] AS mc INNER JOIN user_connections AS uc ON uc.user2 = mc.user1
)
SELECT user1, user2, link_strength FROM user_connections OPTION(MAXRECURSION 1)

到目前为止,查询已经执行了 40 多分钟,所以如果有人能检查语句是否正确组成,我将非常感激。

谢谢!

最佳答案

SQL 2005 及更高版本允许您使用 Common Table Expressions 创建递归查询.文档中的示例应该足以帮助您入门。

关于c# - 选择n级连接度内的所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3999898/

相关文章:

如果数据已在表中,则 SQL 执行插入或更新

sql - 编写 T-SQL 查询来查找所有至少连续出现 3 次的数字

sql - 在 SQL Server 2008 中使用列别名指定数据类型

gps - 我需要建议为具有大量相关信息的项目选择 NoSQL 数据库

c# - Nvarchar 列上的 SELECT 查询返回 Int

c# - 无法将 json 反序列化为 ASP.Net MVC 中的抽象类

c# - CollectionView 与 WPF(或类似的东西)

django - Django 中的社交游戏机制

ios - Google 登录 SDK 2.0.1 for iOS 错误

c# - NUnit 无法加载 MSTestAdapter/MSTestFramework DLL 和 "couldnt find any tests"