我有一个员工表,其中包含一个经理ID作为列。如果我需要获得某个员工的经理经理,我该如何有效地做到这一点?如果我们需要5层深度怎么样?
如果这是一项要求,我们是否可以更改数据库架构,以便更有效地完成这项工作?
答案 0 :(得分:1)
阅读this article,了解如何定义自己的Oracle connect by
自定义版本。
答案 1 :(得分:0)
当我做这样的事情时,我可能只会让人在桌子上
employee
然后我会有一个包含列的management
表
manager_id
和employee_id
两个列都引用了employee.id(因为经理也是员工,得到它吗?)
这样你就可以为每个指向他的经理的员工创建一个management
条目,并为每个经理做同样的事情......并且它会根据你的需要进行多深入的处理。< / p>
编辑:我真的假设你会有另一张表managerdata
,其中包含有关每位经理的其他数据,但我不会复制employee
中的数据 - 只需添加有关经理的额外详情,包含指向employee.id
答案 2 :(得分:0)
我能想到的唯一方法就是根据需要尽量减少。一个简单的例子是:
///hight: how far up the manager chain to go
///startid: The id from which to start
function getManager ($startid, $hight)
{
return getManagerRecurse ($hight, 0, $startid);
}
function getManagerRecurse ($hight, $curHight, $curid)
{
if ($hight == $curHight)
return $curid;
$sql = "SELECT `managerid` FROM `table` WHERE `id`='$curid' LIMIT 1";
$result = mysql_query($sql);
if (mysql_num_rows($result) == 0)
return -1; //Can't go up any further, so just return -1
list($manid) = mysql_fetch_array($result);
return getManagerRecurse ($hight, $curHight + 1, $manid);
}
getManager (15,2); //Start at id 15, go up 2 managers
注意:未经测试