需求场景:通过公司某个部门的总监名称获取所有该部门的员工。
比如,通过总监获取所有副总监,再通过各个副总监获取所有各个副总监对应的经理,再通过经理获取对应经理的员工。
mysql的表结构这么设计的,总监的id是1,那么副总监的parent_id就是1,如果副总监的id分别是2、3、4、5等等,那么各个经理的parent_id就是2、3、4、5,依次类推形成一个递归的数据。
问1:PHP如何通过递归一次性把所有总监以下的数据保存到一个变量呢?
问2:取出数据后如何区分哪些是副总监哪些是经理哪些是一线员工呢?
问3:如何分页?(按照我的理解,即使是分页也需要把全部数据递归完毕之后再进行计算,而不是limit 1,10等形式分页)
问题有点多,还请各位大拿请教,多谢。
如下是我的代码。貌似死循环了。。。
public function recuresion($res)
{
foreach ($res as $k => $v)
{
$tmpRes[] = $this->obj->getResult($v['id']); //假设通过该方法获取副总监、经理、员工
if (!empty($tmpRes))
{
return $this->recuresion($tmpRes);
}
else
{
return $tmpRes;
}
}
}
$a = recuresion($res); //这里假设$res是获取的总监的数据
print_r($a);
貌似纯 SQL 就能搞定,不需要 PHP 掺和……
问 1:
问 2:
外面再套一层就好了:
select * from (
问 1 的 SQL) e1 where not exists (select * from employee e2 where e2.parent_id = e1.id)
问 3:
既然是纯 SQL 的话,直接
limit
分页就好了。非要 PHP 的话: