2010-02-19 76 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