如何设计表结构便于treeview显示?回答:
 方法一:
 
一个表
字段如下:
id(自动编号)
fullname(文本)
parentID(长整)parentid就是该种商品上一级的商品id三个字段即可:
读取它的父ID即可反映关系ID    名称            父ID
——————————————————
1    食品饮料类    0
2    饮料类             1
3    果汁类             2
4    山楂汁             3
5    柠檬汁             3
6    碳酸类             2
7    可口可乐             6
8    百事可乐             6
9    酒类             1
10    啤酒类             9
11    烟台啤酒             10
12    青岛啤酒             10
13    白酒类             9
14    茅台             13
15    五粮液             13
16    办公设备类    0
……
  
顶层的类别的parentID为Null
请问,我要进行数量统计时,用什么样的算法比较方便(数据库用ACCESS)?

解决方案 »

  1.   

    SQL版有个骨灰贴,可以找找看,
      

  2.   

    如果是SQL的话,可以使用自定义函数,我就做过传一个ID给函数,则下级的数目也就统计出来,另外建议再定一个字段来判定是否是类别,还是明细项(请看以下自定义函数)CREATE  function dbo.Usf_GetSubNum (@lbid int=0)
     returns int 
    as
    begin
     declare @tmp1 table (lbid int,pid int,lbname varchar(200),isdetail int)
     declare @num int  insert @tmp1 select lbid,pid,lbname,isdetail from lbtab where lbid=@lbidwhile exists(select 1  from lbtab a inner join  @tmp1 b on a.pid=b.lbid  where a.lbid not in (select lbid from @tmp1))  begin     
        insert @tmp1 select a.lbid,a.pid,a.lbname,a.isdetail from lbtab as a inner join @tmp1 as b on a.pid=b.lbid  where a.lbid not in (select lbid from @tmp1)  
    end select @num=count(*) from qyinfo as a inner join tolb as b on a.qyid=b.qyid inner join lbtab as c on b.lbid=c.lbid where b.lbid in (select lbid from @tmp1)
    return @num
    end
      

  3.   

    我也碰到这样的情况,后来是用递归完成的,先扫描当前所选类的子类ID,并压入堆栈,然后一个一个弹出,如果已经是叶子结点了的话,就统计并返回该类的合计,如果不是叶子结点,又调用这个函数,最后的返回值就是你的该类的总计,呵呵,没有说清楚.如果有机会一起交流.用递归的话C/C++中是可以用的,VB就不知如何用了?