无限分级的数据查询是个头痛的问题,递归查询类别,再组合成字符串,用 in 来解决子类所有产品的问题,但是这个效率太低,低的让人无法接受,在此,有一个SQL的方法,可让我们提高效率。
-----提取子类的所有类别ID
create function GetChild (@id int)
returns @t table(id int)
as
begin
insert @t select classid from mproclass where parentid = @id
while @@rowcount > 0
insert @t select a.classid from mproclass as a inner join @t as b
on a.parentid = b.id and a.classid not in(select id from @t)
return
end
-----提取子类以及自己ID的所有类别ID
create function GetChildAndSelf (@id int)
returns @t table(id int)
as
begin
insert @t values (@id)
insert @t select classid from mproclass where parentid = @id
while @@rowcount > 0
insert @t select a.classid from mproclass as a inner join @t as b
on a.parentid = b.id and a.classid not in(select id from @t)
return
end
以上是最佳方案
查询该类别的产品数据的sql为:
sql = "select * from mProduct as a inner join (select [id] from GetChildAndSelf("+classid+")) as b on a.classid=b.id order by psortid desc,pdate desc";
太爽了!
网上还有其他几种方法,贴出来大家一起学习学习
一、
declare @table table(id int,upperid int)
insert into @table
select 1, 2
union all select 3, 2
union all select 4, 1
union all select 5, 3
declare @upperid int
set @upperid=2;
with result(id,upperid)
as
(
select id,upperid from @table where upperid=@upperid
union all
select a.id,a.upperid from @table a inner join result b on a.upperid=b.id
)
select*from result
/*
id upperid
----------- -----------
1 2
3 2
5 3
4 1
(4 row(s) affected)
*/
二、
Create table t(id int,upperid int)
insert into t
select 1, 2
union all select 3, 2
union all select 4, 1
union all select 5, 3
select * from t
create function aa(@upperid int)
returns @t table (id int,upperid int,level int)
as
begin
declare @i int
set @i=1
insert into @t
select *,@i from t where upperid=@upperid
while @@rowcount> 0
begin
set @i=@i+1
insert into @t
select a.*,@i from t a left join @t b on a.upperid=b.id
where b.level=@i-1
end
return
end
select * from dbo.aa(1)
id upperid level
----------- ----------- -----------
4 1 1
(所影响的行数为 1 行)
select * from dbo.aa(2)
id upperid level
----------- ----------- -----------
1 2 1
3 2 1
4 1 2
5 3 2
三、
----创建测试数据
if object_id( 'tbTest ') is not null
drop table tbTest
if object_id( 'spGetChildren ') is not null
drop proc spGetChildren
GO
create table tbTest(id int, upperid int)
insert tbTest
select 1, 2 union all
select 3, 2 union all
select 4, 1 union all
select 5, 3
GO
----创建存储过程
create proc spGetChildren @id int
as
declare @t table(id int)
insert @t select id from tbTest where upperid = @id
while @@rowcount > 0
insert @t select a.id from tbTest as a inner join @t as b
on a.upperid = b.id and a.id not in(select id from @t)
select * from @t
GO
----执行存储过程
declare @upperid int
set @upperid = 2
EXEC spGetChildren @upperid
----清除测试环境
drop proc spGetChildren
drop table tbTest
/*结果
id
-----------
1
3
4
5
*/
[ZT http://www.cnblogs.com/skylaugh/archive/2008/06/03/1213133.html]
分享到:
相关推荐
无限分级通常指的是在数据库中存储的数据结构呈现出树状或者层级结构,如组织结构、菜单系统等,每个节点可能有任意数量的子节点,且没有预设的最大深度。 首先,无限分级的数据库设计通常采用自引用的方式,即在同...
如果数据库中的分类记录没有明确的层级限制,那么这个过程应该是递归的,即每个节点都可以有任意数量的子节点,以此实现无限分级。 在易语言中,我们可以创建一个函数,接收当前节点的ID和父节点作为参数,递归查询...
在网站菜单设计中,无限分级意味着菜单可以包含任意数量的子级,而不仅仅局限于两层或三层。这种设计允许商家灵活地组织产品类别,特别是对于拥有复杂产品结构的大型在线商店而言,能够提供更清晰的导航路径。 无限...
无限分级通常指的是文件系统的目录层次结构,允许用户创建任意数量的子目录,形成一个树形结构。这种结构便于组织大量文件,使得用户可以轻松地找到所需的信息。无限分级的特性包括: 1. 目录结构:用户可以创建多...
要实现无限分级,我们需要设计一个递归数据结构,如自引用的类,以表示具有任意数量级别的节点。例如,我们可以创建一个名为`TreeNodeModel`的类,它包含一个`Children`属性,用于存储子节点的列表: ```csharp ...
此外,由于递归查询可能导致大量的数据库操作,当分类数量庞大时,可能会造成性能瓶颈。不过,这种设计在增加、删除和更新分类时相对简单。 ### 2. 字符串表示法 第二种方案是将父类ID以逗号分隔的形式存储在一个...
无限分级意味着在理论上可以添加任意数量的层级。在易语言中,这通常涉及到动态创建和管理节点,以及处理节点间的父子关系。 为了实现这个功能,开发者需要: 1. **数据结构设计**:定义一个数据结构来存储树型框...
在现代数据库设计中,无限树形结构(或称无限分级结构)是一种常见但复杂的设计模式,它允许数据以层级的方式组织,且每一层级可以包含任意数量的子层级。这种结构在分类系统、论坛、评论树以及文件系统等场景中尤为...
6. 性能优化:由于无限级分类可能会导致大量的数据库查询,因此在实际应用中,可能需要考虑缓存策略,比如预加载部分常用的数据,或者使用存储过程来提高查询效率。 7. 用户交互:为了让用户能够方便地管理和浏览...
在本文中,我们将探讨如何使用jstree和AJAX动态地构建无限分级的树形菜单。首先,我们需要了解基本的数据库设计和数据获取方法。 数据库表结构是构建树的基础。在本例中,表`Menu`有两个关键字段:`Id`(主键)和`...
"分级无线网络中的选路区域更新"这一主题聚焦于如何在这样的网络架构中有效地管理和优化路由策略。无线网络通常由多个层次组成,包括接入点、基站、网关等,每个层次都有其特定的职责和功能。路由区域更新是网络中一...
4. **性能优化**:对于大规模用户群体,频繁的等级查询与更新操作可能成为系统瓶颈。因此,应考虑采用缓存技术、异步处理等方式优化性能,减少数据库负担。 5. **安全性考量**:确保用户等级信息的安全存储与传输,...
如果仅优化了某一类型的查询,可能会牺牲其他查询的性能。优秀的时序数据库如InfluxDB iox旨在同时提供一流的指标查询和分析查询性能,满足多样化的查询场景。 【误区四:计算与存储耦合】 传统的时序数据库通常...
这一方案不仅实现了数据的跨盘阵实时镜像和快速故障恢复,还支持存储阵列的离线维护、无中断业务运行、无限制的主机数量(License-Free)、快照功能以回溯到正常工作时间点等优点。因此,平度市人民医院的HIS系统...
- **孔径分布的变化**:初始状态下,吹填土的孔隙主要集中在较大的尺寸范围,随着固结压力的增加,这些大孔隙被逐步压缩,最终导致孔隙分布向着更多数量的小孔隙方向发展。这种孔隙分布的变化对于提高土体的整体稳定...
- 书证管理:系统需维护读者信息,支持新增读者记录,以适应读者数量的增长。 - 借还处理:读者通过系统办理借书和还书,系统自动处理借阅状态,如逾期罚款等。 - 罚款处理:对超期未还的书籍,系统会计算罚款...
4. 信息树形分类级别无限分级 5. 设定信息分类Meta标签,方便搜索引擎(百度、谷歌)快速抓取 6. 设定信息分类Title内容,方便搜索引擎(百度、谷歌)快速抓取 7. 生成静态信息分类页面,方便搜索引擎(百度、谷歌)...
4. 信息树形分类级别无限分级 5. 设定信息分类Meta标签,方便搜索引擎(百度、谷歌)快速抓取 6. 设定信息分类Title内容,方便搜索引擎(百度、谷歌)快速抓取 7. 生成静态信息分类页面,方便搜索引擎(百度、谷歌)...
3. **栏目模块**:支持创建无限数量的网站主栏目,例如“关于我们”、“产品展示”、“新闻中心”等,且所有栏目均可在后台进行添加、删除或修改操作。 4. **页面模块**:允许创建无限数量的子页面,如“公司简介...