三层代理 如何更好的查询上下级
for ($i=1; $i<=3; $i++)
{
$user_parent_id = $this->get_top_agent($id,$i);
if($user_parent_id == '0'){
break;
}
}
public function get_top_agent($id,$level){
if($level == 1){
//上级代理ID
$user_parent_id = DB::table('users')->where('id',$id)->value('user_parent_id');
if($user_parent_id == '0'){
return $user_parent_id;
}
}
if($level == 2){
$user_parent_id = DB::table('users')->where('id',$id)->value('user_parent_id');
$user_parent_id = DB::table('users')->where('id',$user_parent_id)->value('user_parent_id');
if($user_parent_id == '0'){
return $user_parent_id;
}
}
if($level == 3){
$user_parent_id = DB::table('users')->where('id',$id)->value('user_parent_id');
$user_parent_id = DB::table('users')->where('id',$user_parent_id)->value('user_parent_id');
$user_parent_id = DB::table('users')->where('id',$user_parent_id)->value('user_parent_id');
if($user_parent_id == '0'){
return $user_parent_id;
}
}
}
自己写的查询上级代理的ID,如果是0就等于查询结束
写的比较固定 有没有更好的写法?
以及如何查询下级用户? 把整个users表都 foreach一遍吗?
关于 LearnKu
写的有问题吧,查来查去不都是
0?用递归简化代码,类似这样,但是要处理好数据错误可能造成的无限递归
改进一下@php_yt 的代码为如下:
把所有上级的 id 都以 json 格式存在表里面。然后查的时候就很简单了。
目前我一个项目中这样设计的,同样的固定三级代理,一个上级、一个顶级字段,创建的时候可以写个观察者
creating查询对应的祖先id赋值到对应的字段。虽然字段冗余, 但是后续各种查询相对比较容易哦,目前项目已经完成,没遇到什么大的问题
例如:
MPTT left 和right 加上 一个deep范围 一句简单的SQL轻松捞出N级代理
超过2层可刑