日期:2014-05-19  浏览次数:20641 次

****关于分类和产品,根据分类捞取该分类下及子分类下的产品的所有记录。。请大侠门来帮忙呀。。敬礼!
表结构如下:
product表
id       name             categoryid
1         体育信息               1
2         文娱信息               2
3         健康信息               3
4         足球信息               4
5         蓝球信息               5
6         明星信息               6
7         趣事信息               7
8         保健信息               8
9         足球世界杯信息   9
category表
categoryid   categoryname   parentid
1                     体育                       0
2                     文娱                       0
3                     健康                       0
4                     足球                       1
5                     蓝球                       1
6                     明星                       2
7                     趣事                       2
8                     保健                       3
9                     足球世界杯           4
 
现在的select下拉框如下显示   :
*************************
体育
        --足球
                  --足球世界杯
        --蓝球
文娱
        --明星
        --趣事
健康
        --保健
*************************
如果我选择 "体育 ",希望捞到记录1,4,5,9
如果我选择 "足球 ",希望捞到记录4,9
如果我选择 "足球世界杯 ",希望捞到记录9

也就是选取大类时要把子类中的记录也捞出来。。
请问怎么写SQL才会更合适。。因为我写的速度太慢

------解决方案--------------------
写个函数返回所有子类

create function fn_allsub(
@categoryid int
)
returns @r table (categoryid int,categoryname varchar(30),parentid int)
as
begin
insert @r select * from category where categoryid=@categoryid
while exists (select 1 from category where parentid in (select categoryid from @r) and categoryid not in (select categoryid from @r))
insert @r select * from category where parentid in (select categoryid from @r) and categoryid not in (select categoryid from @r)
return
end