2010-02-19 75 views
0

我正在使用SQL Server 2k8并且需要能够拉动态内容的表。 所以,我正在考虑有2列会像父母和孩子一样行事。从子内容检索内容

ContentId - SubContentId - ContentInfo 
100   100   data here 
101   100   data here 
102   100   data here 
103   100   data here 

所以,虽然内容识别的增加,该SubContentId涉及100因此父内容识别,如果我选择内容识别100,我会检查该号码SubContentId以及以拉回来的所有ContentId 100的详细信息。此方法是否合理?我的标志是什么?

+0

你有内容和子内容混在一起吗? (当你运行select命令时会发生什么,你期望什么?) – Mark 2010-02-19 11:37:34

+0

嗯,我不认为我有。然后,我可以有一个SubContentId为101,所以我会拿起101和100的所有SubContent数据。 – 2010-02-19 12:02:10

回答

1

你有一个自我引用表。这并不全是坏事。你所要做的就是创建一个像这样的查询。

SELECT * FROM content where subcontentID = contentID AND contentID = @contentID

结果将是有规定的内容识别

有序的,如果您需要查看所有数据太结果集可能是不错的所有内容记录。

SELECT * FROM content where subcontentID = contentID ORDER BY subcontentID,contentID 

这会给你所有的内容记录保持所有的子内容记录在一起。

这并没有什么不好,它可以通过创建具有相同模式的重复表格来保存。

+0

我需要添加另一列,以便我可以将其用作父列。我希望所有数据(从100到105)都与第一个项目100相关联。 – 2010-02-19 13:13:44

1

创建,安装,测试:

CREATE TABLE #tmp (
    ContentID int, SubContentID int, ContentInfo varchar(255) 
) 

INSERT INTO #tmp VALUES (100, 100, 'info 1') 
INSERT INTO #tmp VALUES (101, 100, 'info 2') 
INSERT INTO #tmp VALUES (102, 100, 'info 3') 
INSERT INTO #tmp VALUES (103, 100, 'info 4') 
INSERT INTO #tmp VALUES (104, 100, 'info 5') 

SELECT ContentInfo, 
      (SELECT ContentInfo + ',' as "data()" 
      FROM #tmp x 
      WHERE x.SubContentID = z.ContentID FOR XML PATH('') 
     ) As [SubContent] 
FROM #tmp z 
WHERE ContentID = 100 
+0

从这个伟大的例子,我已经看到,我需要另一列,所以我可以选择所有的100例如。谢谢! :o) – 2010-02-19 13:07:49