树结构的统计请大家帮忙提供一个思路
在以下的程序中我用我的思路统计3000个下线大约需要1分多钟的时间,我感觉这样的效率不是太好,想请教一下各位有没有更好的思路
业务需求:要求在一个传销模式的网中(即一个树状的结构),对所有的销售人员发放工资,或者是列出某个销售人员的所有下线(下线数超过几万,甚至更多)
发放工资的要求:该销售人员的销售额加上下线的销售额的和超过M(M为变量,该变量已经设置好金额)就可以发放工资
表结构:
销售人员的表(部分字段已经省略)
CREATE TABLE [dbo].[销售人员] (
[id] [decimal](18, 0) IDENTITY (1, 1) NOT NULL ,
[编号] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[名称] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[上线名称] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[上线编号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
销售明细表
CREATE TABLE [dbo].[销售明细] (
[id] [decimal](18, 0) IDENTITY (1, 1) NOT NULL ,
[编号] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[销售金额] [money] NOT NULL ,
[录入时间] [datetime] NOT NULL ,
[上线编号] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
我的思路:
(1)列出某个销售人员的所有的下线
a.用一个递归函数把该销售人员所有下线的编号插入到一个临时表中
b.在销售人员数据窗口retrieve的时候 先setsqlselect("select * from 销售人员 where 销售人员.编号 in (select 编号 from 临时表 )")
其中递归函数的代码:
function uf_shopNode_count(string s_id)
s_sql="select 编号 from 销售人员 where 编号 ="+"'"+us_id+"'"
ds=uff_createDs(s_sql) //创建一个datastore,引用外部的函数
i_rowCount =ds.rowCount()
for i=1 to i_rowCount
s_id=ds.getItemString(i,"编号")
INSERT INTO 临时表
( id )
VALUES ( :s_id ) ;
uf_shopNode_count(s_id) //函数名称
next
end function
(2)发放工资的思路
a.用递归算出每个销售人员的总额,把编号和金额插入到临时表中
b.处理临时表中的数据,然后发放工资
问题:
如果用我现在的思路如果数据量比较大(超过几万),系统地速度会很慢