问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql server 中如何实现查找下级分类以及下下级?

发布网友 发布时间:2022-04-09 21:31

我来回答

7个回答

热心网友 时间:2022-04-09 23:01

参考一下:
--建立测试数据
if object_id('new_tree') is not null drop table new_tree
go
/*parent对应父亲结点,child对应儿子结点,如果child is null则本结点为叶子结点*/

create table new_tree ( parent varchar(80), child varchar(80))
go
insert new_tree values ('1','2');
insert new_tree values ('1','3');
insert new_tree values ('2','4');
insert new_tree values ('2','5');
insert new_tree values ('3','6');
insert new_tree values ('3','7');
insert new_tree values ('3','8');
insert new_tree values ('6','9');
insert new_tree values ('5','10');
insert new_tree values ('4','11');
insert new_tree values ('9','12');
insert new_tree values ('7',NULL);
insert new_tree values ('8',NULL);
insert new_tree values ('10',NULL);
insert new_tree values ('11',NULL);
insert new_tree values ('12',NULL);

--创建存储过程
if object_id('proc_new_tree') is not null drop proc proc_new_tree
go
/*@parent 输入根结点标识,@mode为0 则输出为所有子孙记录,否则输出所有叶子结点*/

create proc proc_new_tree (@parent varchar(80),@mode int =0)
as
begin
set nocount on
/*如果不是SQLSERVER2000可以用临时表*/
declare @tmp1 table (parent varchar(80), child varchar(80),trace varchar(256))
declare @tmp2 table (parent varchar(80), child varchar(80),trace varchar(256))
declare @tmp3 table (parent varchar(80), child varchar(80),trace varchar(256))

insert @tmp1 select parent,child,@parent from new_tree where parent = @parent
insert @tmp3 select parent,child,@parent from new_tree where parent = @parent

/*循环的次数等于树的深度*/
while exists(select * from @tmp1 where child is not NULL)
begin
insert @tmp2 select a.parent,a.child , b.trace+'->'+a.parent
from new_tree a,@tmp1 b where a.parent = b.child
/*@tmp2表中存本次查询的层次的所有结点*/
delete from @tmp1 where child is not NULL
/*@tmp1表中最终存的是叶子结点*/
insert @tmp1 select * from @tmp2
/*@tmp3表中最保存每次查到的子孙*/
insert @tmp3 select * from @tmp2
delete from @tmp2
end
if @mode =0 select * from @tmp3
else select trace from @tmp1
set nocount off
end
go

--调用存储过程
exec proc_new_tree '6',0
exec proc_new_tree '6',1
go

--删除测试环境
drop table new_tree
drop proc proc_new_tree

/*
parent child trace
----------------------------
6 9 6
9 12 6->9
12 NULL 6->9->12

trace
-------
6->9->12
*/
------------------------------------------------------
再给一个例子:
--根据父节点生成所有子节点的记录集:

--生成测试数据
create table BOM(ID INT,PID INT,MSG VARCHAR(1000))
insert into BOM select 1,0,NULL
insert into BOM select 2,1,NULL
insert into BOM select 3,1,NULL
insert into BOM select 4,2,NULL
insert into BOM select 5,3,NULL
insert into BOM select 6,5,NULL
insert into BOM select 7,6,NULL
go

--创建用户定义函数
create function f_getChild(@ID VARCHAR(10))
returns @t table(ID VARCHAR(10),PID VARCHAR(10),Level INT)
as
begin
declare @i int,@ret varchar(8000)
set @i = 1
insert into @t select ID,PID,@i from BOM where PID = @ID

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

insert into @t
select
a.ID,a.PID,@i
from
BOM a,@t b
where
a.PID=b.ID and b.Level = @i-1
end
return
end
go

--执行查询
select ID from dbo.f_getChild(3)
go

--删除测试数据
drop function f_getChild
drop table BOM

--输出结果
/*
5
6
7
*/

热心网友 时间:2022-04-10 00:19

在文件 includes/lib_goods.php 最后加上

//*** 调用商品分类指定分类下级分类
function get_parent_id_tree($parent_id)
{
   $three_c_arr = array();
   $sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERE parent_id = '$parent_id' AND is_show = 1 ";
   if ($GLOBALS['db']->getOne($sql))
   {
       $child_sql = 'SELECT cat_id, cat_name, parent_id, is_show ' .
               'FROM ' . $GLOBALS['ecs']->table('category') .
               "WHERE parent_id = '$parent_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";
       $res = $GLOBALS['db']->getAll($child_sql);
       foreach ($res AS $row)
       {
           if ($row['is_show'])
              $three_c_arr[$row['cat_id']]['id']   = $row['cat_id'];
              $three_c_arr[$row['cat_id']]['name'] = $row['cat_name'];
              $three_c_arr[$row['cat_id']]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
       }
   }
   return $three_c_arr;
}

声明后用$smarty调用,就是在index.php中加上下面一句:
$smarty->assign('get_parent_id16_tree', get_parent_id_tree(16));//调用父级分类6的下级分类
最后就可以在index.dwt模板文件里开始调用了
<!--{foreach from=$get_parent_id16_tree item=list}-->
<a href="http://chenlihong89791781.blog.163.com/{$list.url}" target="_blank">{$list.name|truncate:15:true}</a>
| <!--{/foreach}--></div>

热心网友 时间:2022-04-10 01:53

根据你给出的数据,19的子级有:20,21,22,27,然后再把所有上级ID为20,21,22,27的再找出来!这样就实现了把子级也查询出来!
<br>
<br>语句如下:
<br>select * from table where superior in (select sid from table where superior=19)

楼主的补冲看到了!

不地很遗憾的是SQL SERVER当中没有这种语句,建议你自己做一个存储过程!

如果要想实现的话!最笨的方法就是多套几个 in

不过像你所说的,你的级可能不止十来级吧!
自己做一个存储过程吧!

参考资料:http://www.itpub.net/199797.html

热心网友 时间:2022-04-10 03:45

"select * from 表名 where id> '19' order by id desc"

热心网友 时间:2022-04-10 05:53

没看懂意思

热心网友 时间:2022-04-10 08:17

我不知道...
只是你的100分悬赏有点*,我这个答案能成为最佳吗?

热心网友 时间:2022-04-10 10:59

直接用sql语句好像不行吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
好听简单的店铺名字店铺好听的名字大全 ...还脱皮。一年四季都这样,夏天能好一点,冬天严重时怎么回事啊?应该怎 ... 手,脚一年四季脱皮怎么办 地铁跑酷 地铁跑酷鼠小意会回归吗? 印度国家安全卫队身经百战 飞机驾驶室的机舱门在飞行时关闭么?为什么会有劫机成功的案例,不... 为什么中国不会劫机 急求翻译几个句子! 急求!!翻译句子!在线等! 我们和公婆住一起,大姑子每周末都过来耍 会计大专不会做的题,哪个软件有解题思路 怎样在哈尔滨亲民商城网上购物商城购物? 哈尔滨大型商场市场状况?主要谈谈远大、中央商场、松雷 我国客运量最少的地铁在哪? 白色的衣服和黑色的衣服混着洗,白色衣服变成了黑色,怎样才可以变回白色? 白衣服染黑了了怎么办? 哈尔滨商场 乌鲁木齐地铁什么时候恢复运营? 车载天行健怎么清内存 我国最“寂寞”的乌鲁木齐地铁,客流量是多少? 哈尔滨所有商城名字 哈尔滨早7点到晚7点营业商场。有几个? 什么身材穿吊带裙会更性感? 职场女性怎么穿吊带才会有自然舒适的感觉呢? 给爸妈买保险,哪一个险种好 简约的美式复古路线适合什么样气质的女生? 小姐姐一袭蓝色真丝吊带连衣裙,展现完美身材 ,这样的穿搭你见识过吗... 我想买份保险 我现在年收入是二万多元 买什么保险合适 韩朝“天安”舰沉没事件 结合中国古代、近代的军事事件,谈谈对你的启示 乌鲁木齐有地铁了吗? 为什么乌鲁木齐不建地铁呢? 乌鲁木齐地铁1号线的意义 怎么查找的地址,不让对方知道 房产测绘报告怎么看 农村房屋测量方面的实习报告 就是这次XX市下乡测量农村房屋方面的 要当毕业论文的 急 急 急4月5号前交 房产测量出测绘报告总结时实测建筑面积比规划报建面积小应该怎么写_百度问一问 房屋测绘报告最迟多久出 房地产测绘的步骤都是什么啊?房产测绘上岗证都考什么科目啊? 房地产测绘报告的有效期 一灸瘦瘦身贴有效果吗 单言的读音是shan,还是dan 灸灸瘦是*,我用了半个月,没有一点效果,想退货竟然电话都打不通了,大家千万不要再像我一样被骗了 一灸瘦效果怎么样 单字做姓读什么? 姓单怎么读 台湾陈氏冰灸火灸瘦身排毒贴片减肥效果如何,是不是真的产品 在引用js文件timestamp作用是什么? 在js里 timestamp: timestamp,这句是啥意思 :后边写的是字符窜 还是什么?? 如何写js语句将当前时间传入oracle表中字段,类型为timestamp