1、既然要談到sql,數據庫表是必須的
2、數據結構
3、獲取某個節點的所有子節點
傳統的寫法(sql2000) 很麻煩,暫且就不寫了
來看看CTE的寫法
CREATE PROC sp_getTreeById(@TreeId int)
AS
BEGIN
WITH cteTree
AS (SELECT *
FROM TuziTree
WHERE Id = @TreeId --第一個查詢作爲遞歸的基點(錨點)
UNION ALL
SELECT TuziTree.* --第二個查詢作爲遞歸成員, 下屬成員的結果爲空時,此遞歸結束。
FROM
cteTree INNER JOIN TuziTree ON cteTree.Id = TuziTree.ParentId)
SELECT *
FROM cteTree
END
exec sp_getTreeById @TreeId=1001
結果
4、使用節點路徑來做(每個節點路徑都保存自身的路徑和所有父節點的路徑=自己和所有父節點的關聯)
5、既然有個路徑
那麼查詢其所有子節點 只需要 where nodePath like '/1001/%'了
這樣就會簡單很多,加上索引。
總結:
如果在性能的需要上,我們可以採用按需加載,點擊節點時候 纔會加載其所有子節點。
如果在變化不大的情況下,可以採用緩存 。這樣的處理 可以滿足很多業務需求。
良好的表設計會給後期的開發以及需求變化 帶來更多的便利。
下次繼續總結sql方面的知識,案例一切以實際工作演變而來。