【发布时间】:2011-04-24 05:51:42
【问题描述】:
我正在处理一个社交网站项目,我需要列出我的联系人的“一级、二级和三级联系人”。我正在使用 SQL Server 和 C#
假设有一个像这样的contact 表:
一级接触:
- 如果
gulsah是我,那么我的第一学位联系人是burak,sennur
我用来选择这个的查询:
SELECT contact_2 FROM Contacts_Table WHERE contact_1 like 'gulsah'
二级联系人:
如果gulsah 又是我,那么我的二级联系人是:mali
难点在于从我的联系人中选择不是我的一级联系人的联系人。
我可以选择相互联系,但我想这不是正确的方法。
例如,选择我的共同联系人(gulsah)和burak:
SELECT contact_1 FROM (SELECT * FROM Contact_Test
WHERE contact_2 like 'burak') a
INNER JOIN (SELECT contact_1 FROM Contact_Test
WHERE (contact_2 = 'gulsah')) b
ON a.contact_1 = b.contact_1
此查询有效,但正如我所说,这不是这项工作的正确方法。
三级联系人:
如果gulsah又是我,那么我的三级联系人是_mehmet,ahmet
我需要从我的联系人的联系人中选择不是我的一级和二级联系人的联系人:)
Here is a post from Linkedin which explains contact level.
感谢您的回复。
【问题讨论】:
-
您是否考虑过使用 hierarchy functions 或递归 CTE(SO 上的大量示例)来实现这一目标的可能性?不是答案,只是一个想法。
-
实际上,我在使用左右字段的无限子类别系统中使用层次结构,但老实说,我不明白如何在这个问题上使用这种方法。我想我需要在联系人表上存储一些数据,例如 /1/2/5/ 还是我错了?
-
与您的问题不严格相关,但我看到两行:{gulsah,burak} 和 {burak,gulsah}。它们代表的不是同一种关系吗?
-
这两行用于检查 Approval 以供未来开发。例如; burak 可以在 gulsah 的名单中,但同时,gulsah 可能不想被列入 burak 的名单。我刚刚意识到这是一种愚蠢的方法。无论如何,您可以忽略重复的行。
标签: sql sql-server-2008 contacts contact-list