首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sql Server 2008中存储网站层次结构

在Sql Server 2008中存储网站层次结构
EN

Stack Overflow用户
提问于 2010-04-02 17:50:41
回答 1查看 89关注 0票数 3

我想在一个表中存储网站页面层次结构。

我想要实现的是高效的

1)按路径解析(最后有效的)项(例如"/blogs/programming/tags/asp.net,sql-server","/blogs/programming/hello-world“)

2)获取breadcrump的祖先项

3)编辑项目,不更新子项、子项、子项等的整个树。

由于第三点,我认为这张表可以是这样的

代码语言:javascript
复制
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左右。

实现这一切的最佳方式是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-02 18:06:19

这样做似乎很好,您可以使用CTE递归函数来为您创建层次结构

就像这样

代码语言:javascript
复制
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    Items
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2566000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档