重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这个需要用程序递归处理
成都创新互联从2013年成立,先为东洲等服务建站,东洲等地企业,进行企业商务咨询服务。为东洲企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
$dept_tree=[];
$deptid = 19;
while($deptid0){
//假设你的数据库查询是这个函数,根据条件直接查询一条记录返回
$dept = getone('department',['id'=$deptid]);
//防止数据丢失出错
if(empty($dept))break;
array_unshift($dept_tree,$dept);
$deptid = $dept['dep_parentid'];
//如果需要防止数据错乱出现递归,这里可以判断一下
if(in_array($deptid,array_column($dept_tree,'id') !== false){
//说明职位关系乱了,有死循环
break;
}
}
可以把这段代码封装成一个函数使用。这里就不论从哪一级开始查询了,总是能把该职位及其上级全部查询出来,按顺序放进数组里
$dept_tree 类似这样
array(
0=array(
'id'=1,
'dep_parentid'=0,
'dep_name'='顶级',
),
1=array(
'id'=2,
'dep_parentid'=1,
'dep_name'='国灿金融',
),
2=array(
'id'=4,
'dep_parentid'=2,
'dep_name'='招聘部',
),
3=array(
'id'=19,
'dep_parentid'=4,
'dep_name'='经理助理',
),
)
function num($num,$uid)
{
$result1=mysql_query("select * from user where lid='".$uid."'");
$n=mysql_num_rows($result1);
$f = $num + $n;
$t = num($f,$uid)
return $t;
}
用一个递归就可以了
查询所有为0的一级会员
循环查询出来的一级会员并为每一个一级会员初始化一个计数量为0的变量
根据查询出来的一级会员ID查所有会员agentid等于一级会员ID的二级会员
得出每个一级会员下面的二级会员数量,并加在对应的计数量
根据查询出来的二级会员ID查所有会员agentid等于三级级会员ID的二级会员
得出每个二级级会员下面的三级会员数量,并加在对应的计数量
如果有四级可以继续循环下去,最后的计数量就是每个一级下面有多少个下属会员了
这个就要看你的数据库是怎么实现的。
我之前给一个人做个一个类似的会员推广提成的模块,就a推广出的a-1,a-2继续推广,得到a-1-1,a-1-2等等。
我的数据库设计思路如下:
用户表中有一个son这么一个字段,这个字段中存放名下所有会员的id,用分号隔开。
这个字段的维护:
比如a-1-1推广出了一个a-1-1-1,此新用户的id是12345,那么给a-1-1 a-1 a这个三个用户son字段内均添加12345这个id,删除一个用户做法一样。
有了这张表就能实现你要的效果。
查一个会员名下所有的会员,只需要读取该会员的son字段即可
查一个会员的上级 怎在数据库中所搜son字段,含有此会员id的都是他的上级会员。
当然,还有一个字段是标记此会员的直接上级会员,这样 一张表就能从任意会员得到整个会员推广树。
希望这个思路能帮到你。