以下是引用wzh210128525在2016-3-30 17:08:42的发言:
比如一个数据库有三个字段 id,yid,name 查找ID为10的记录,查找到后取YID和name内容;之后再查找ID为上次查找的YID内容,以次类推 直到YID为0
如题
这其实就是一个递归查询,大概的思路如下
id=10
用ID=10调用,递归函数(10)
递归函数()的大概思路
先用ID的参数,来查找,如果找到了,同时满足YID不等于0,就把YID的值赋给ID,也就是,ID=YID
然后在函数内部再调用自身函数,如
ID=YID
递归函数(ID)
由于,各给语言的函数写法不同。下面用VFP的写法。
*数据库:tmp
*字段:id,yid,name
*结束:YID=0
*构造测试数据
create cursor tmp(id int,yid int,name C(10))
INSERT INTO tmp(id,yid,name) values(10,11,"10")
INSERT INTO tmp(id,yid,name) values(11,12,"11")
INSERT INTO tmp(id,yid,name) values(12,13,"12")
INSERT INTO tmp(id,yid,name) values(13,14,"13")
INSERT INTO tmp(id,yid,name) values(14,0,"14")
INSERT INTO tmp(id,yid,name) values(15,16,"15") &&这个行是多出的数据,看看调用的时候,有没显示他,正常是不显示他的
*调用开始,用ID=10调用,并显示数据
=递归(10)
*递归函数
FUNCTION 递归(id1)
select id,yid,name from tmp where id=id1 into array ary1
*输出id,yid,name
?ary1(1,1),ary1(1,2),ary1(1,3)
*判断是否递归,条件是 YID>0
if ary1(1,2)>0
id2=ary1(1,2)
递归(id2)
else
return
endif
endfunc