问一个逻辑运算算法的思路

WBOY
Release: 2016-06-23 13:51:26
Original
802 people have browsed it



大概意思就是a是b的父级,b是c的父级,以此类推,无限顺延分级;
其中每一个成员都有一个对应的value值,这个value值为是1-30的随机数;
目前需要计算出,当我随意选择一个成员时,可以计算出这个成员以及向上所有的父级成员累计的value值总和是在哪一个成员身上value总值突破200的。


回复讨论(解决方案)

举个栗子,假如f的下一个成员是g,f是g的父级,g的value值为190,
那么最后计算出的结果就是在d这一父级的时候,g和g的所有父级的value值总在d这一级的时候总值达到了203,突破了200,那么d这个成员就是我最后要的结果。

求助!!!!!!!!!!!!!!

递归吧

//类里面的递归函数function test($id,$num=0,$max=200){        $sql="SELECT * FROM {{test}} WHERE id=$id";	$res=Yii::app()->db->createCommand($sql)->queryRow();	$num+=$res['value'];	if($num<$max){            $name=self::test($res['pid'],$num);	}else{            $name=$res['name'];        }	return $name;    }//调用$tr=new classtest();echo $tr->test(7);//结果 d
Copy after login

如果你的pid都比id小的话比较好办
order by pid desc 
然后循环fetch即可, 

给个奇葩的sql,(符合上面条件的情况下) 
select * from (
select id, pid, `value`, 
if(id=@p, concat(@p:=pid,'|',@a := @a+`value`), ''), if(@a>@s, id, '-') as Final,   @a
from test, (select @a:=0, @p:=6, @s:=30) x   -- 其中6改成你所选择的成员的id, 30 改成你的界(200)
where @a order by pid desc, id
) y
where Final!='-'
limit 1
;
当然实际上在php里计算比较方便。 


如果不满足这个条件的话。。。。好像只能反复查询了。。。。。。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template