分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

树形结构表的存储【转自:https://www.cnblogs.com/Tjna/p/9026980.html】

发布时间:2023-09-06 01:53责任编辑:顾先生关键词:http

一、树形结构例子分析:

以360问答页面为例:http://wenda.so.com/c/

我们通过观察URL,可以明确该页面的数据以树形结构存储,下面三块模块分别为:

①根节点

②根节点的第一层子节点

③为左侧所选择节点的下一层子节点

(图1)

该例简化的树形结构图如下:

(图2)

我们不难发现,每当点击图1红框内的类别时,页面主体问题部分会显示该类别节点下所有子节点的问题。因此,需要实现查询出某节点所有子节点的功能。

二、表的存储:

需要存储两张表:

1、类别表

create table [QType](QID int not null primary key,QPID int not null,QPath varchar(max) not null,QTypeContent varchar(max) not null)

·路径字段的添加方法:找到父节点的Path +“,”+自身的ID 即可。

2、问题表

create table QContent(ContentID int not null primary key,TypeID int not null,Content varchar(max) not null)

·问题表的TypeID即为类别表的QID

三、表的查询

//查询出某ID的所有子节点(包含自身)select * from QType where CHARINDEX((select QPath from QType where QID=参数),QPath)>0

CHARINDEX函数说明:CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

通过CHARINDEX如果能够找到对应的字符串,则返回该字符串位置,否则返回0。因此当其>0时表示能在路径中找到相应字符串,即可查询到自身以及子节点。

例如:

//查找出以2为ID节点的所有子节点(包含自身)select * from QType where CHARINDEX((select QPath from QType where QID=2),QPath)>0

 查询结果:

因此,实现以上功能(即点击类别找到相应问题显示),则为:

select QContent.Content from QContent where QContent.TypeID IN(select QType.QID from QType where CHARINDEX((select QType.QPath from QType where QID=参数),QPath)>0)

四、总结

通过新增一个路径字段的方法,可以无需使用递归,有效提高效率。

正在学习中,欢迎大家指出问题&相互交流!

树形结构表的存储【转自:https://www.cnblogs.com/Tjna/p/9026980.html】

原文地址:https://www.cnblogs.com/skj0330insn/p/9029389.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved