求一SQL语句------关于多级目录查询的

heh_621 2007-05-18 06:07:12
类别表:Category {CateID,Name,ParentID} 其中ParentID指向本类别的直接父类的CateID,
新闻表:News {NewID,title,body,CateID} CateID指向本新闻所属的分类CateID;

现在知道1个类别的CateID,想要找到属于该类别及子类别所有新闻的NewID,但是并不清楚类别是分几级的,要求子类的子类的子类的......子类都包含
...全文
441 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxing2006 2007-05-19
  • 打赏
  • 举报
回复
用存储过程 或 程序 实现方式一样 递归寻找父结点为当前结点的记录
smile9961 2007-05-19
  • 打赏
  • 举报
回复
--这个函数用于返回指定cateId及其所有子cateId
create function dbo.get_self_and_sub_items
(
@cateId int
)
returns @t table(cateId int, [level] int)
as
begin
declare @i int
set @i = 0

insert into @t select @cateId, 0

while @@rowcount > 0
begin
set @i = @i + 1

insert into @t
select a.cateId, @i
from category a, @t b
where a.parentId = b.cateId and b.[level] = @i -1
end

return
end
go

--查询属于指定类别及其所有子类别的NewID
select a.[newId]
from news a
inner join
(
select cateId
from dbo.get_self_and_sub_items(这里传入已知的cateId)
) b
on a.cateId = b.cateId
heh_621 2007-05-19
  • 打赏
  • 举报
回复
问题是:不知道目录分几层,也就不知道子查询要嵌套多少次啊?
Seraph123 2007-05-18
  • 打赏
  • 举报
回复
LZ试试用子查询来做啊~~~
只是分类查询的话用SQL的子查询语句应该没问题吧?
我觉得应该不难吧?
是不是我想的太简单了?
浅蓝马 2007-05-18
  • 打赏
  • 举报
回复
用程序是相当之困难啊,也可能我的知识不足啊,反正我是想不出用一个SQL就能实现这样的结果。
建议楼主还是在程序中用一个递归函数来实现吧。程序量也不大啊。
heh_621 2007-05-18
  • 打赏
  • 举报
回复
wuxing2006(金宝)

你的意思是不是说,只用SQL是没办法做到的?必须用程序?
heh_621 2007-05-18
  • 打赏
  • 举报
回复
其他表根这个没关的啊,只想找到那些新闻的NewID,打个比方吧,有个类别叫“生物”,他有2个子类别“动物”,“植物”;“动物”又有N个子类别“肉食动物”,“植食动物”...,每个子类别又可能不知道有几个子类别,比如“人”,“狗”....
现在确定了类别“动物”,想要找到所有“动物”的新闻,
wuxing2006 2007-05-18
  • 打赏
  • 举报
回复
不然只能递归来读了
wuxing2006 2007-05-18
  • 打赏
  • 举报
回复
用程序读,如果你的CAT_ID有规则就好办了,

如:
1级:CATID=01;
二级:CATID=0101;
三级:CATID=010101;
Seraph123 2007-05-18
  • 打赏
  • 举报
回复
麻烦你能不能把你建的所有表都说出来啊~~~
还是说就这两个表?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧