我想在一个表中存储网站页面层次结构。
我想要实现的是高效的
1)按路径解析(最后有效的)项(例如"/blogs/programming/tags/asp.net,sql-server","/blogs/programming/hello-world“)
2)获取breadcrump的祖先项
3)编辑项目,不更新子项、子项、子项等的整个树。
由于第三点,我认为这张表可以是这样的
ITEM
id type slug title parentId
1 area blogs Blogs
2 blog programming Programming blog 1
3 tagsearch tags 2
4 post hello-world Hello World! 2我是否可以以某种方式使用Sql Server的hierarchyid类型(特别是第1点,"/blogs/programming/tags“是最后一个有效项)?
树的深度通常在3-4左右。
实现这一切的最佳方式是什么?
发布于 2010-04-02 18:06:19
这样做似乎很好,您可以使用CTE递归函数来为您创建层次结构
就像这样
DECLARE @ITEM TABLE(
id INT,
type VARCHAR(20),
slug VARCHAR(50),
title VARCHAR(50),
parentId INT
)
INSERT INTO @ITEM SELECT 1,'area','blogs','Blogs', NULL
INSERT INTO @ITEM SELECT 2,'blog','programming','Programming blog',1
INSERT INTO @ITEM SELECT 3,'tagsearch','tags',',',2
INSERT INTO @ITEM SELECT 4,'post','hello-world','Hello World!',2
;WITH Items AS (
SELECT *,
CAST('/' + slug + '/' AS VARCHAR(50)) PathVal
FROM @ITEM
WHERE parentId IS NULL
UNION ALL
SELECT i.*,
CAST(Items.PathVal + i.slug + '/' AS VARCHAR(50))
FROM Items INNER JOIN
@ITEM i ON i.parentId = Items.ID
)
SELECT *
FROM Itemshttps://stackoverflow.com/questions/2566000
复制相似问题