在查询团队,地区分级,类别分级等多级分布需求的时候,大家通常想到的方法就是递归查询,但是,如果分类的级别比较多的话,递归查询的过程就比较复杂,会给服务器带来很大的压力,那么,今天就跟大家分享一个不用递归也能查询分类的方法
/*
* 由用户id,查询它团队下三代会员的每代会员的总业绩和人数
* 一代总共多少人,多少业绩;二代总共多少人,多少业绩;三代总共多少人,多少业绩
*/
public function getTeam($user_id)
{
$limit_age = 3; //查询的代数
$user_arr = []; //循环条件数据
$age1 = 0;
$age2 = 0;
$age3 = 0;
$team1 = 0;
$team2 = 0;
$team3 = 0;
array_push($user_arr,['user_id' => $user_id,'age' => 0]);
for($i = 0; isset($user_arr[$i]); $i++){
$user_info = $user_arr[$i];
$root_age = $user_info['age']; //代数
$userId = $user_info['user_id']; //用户id
if($root_age < $limit_age || $limit_age == 0){
$push = UserTeam::find()->select('user_id,pid')->where(['pid' => $userId])->asArray()->all();
foreach($push as $k => $v){
$vUserId = $v['user_id'];
$new_age = $root_age + 1;
$one = User::find()->select('team_turnover')->where(['id' => $vUserId])->asArray()->one();
if($new_age == 1){
$age1 += $one['team_turnover'];
$team1 += 1;
}
if($new_age == 2){
$age2 += $one['team_turnover'];
$team2 += 1;
}
if($new_age == 3){
$age3 += $one['team_turnover'];
$team3 += 1;
}
array_push($user_arr, [
'user_id' => $vUserId,
'age' => $root_age + 1,
]);
}
}
}
}