Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获得员工经理的经理_Mysql_Schema_Query Optimization - Fatal编程技术网

Mysql 获得员工经理的经理

Mysql 获得员工经理的经理,mysql,schema,query-optimization,Mysql,Schema,Query Optimization,我有一个employee表,其中包含一个经理ID作为列。如果我需要找某个员工的经理,我将如何有效地做到这一点?如果我们需要一个5层的深度呢 如果这是一项要求,我们可以更改数据库模式以提高效率吗?请阅读,了解如何通过自定义定义自己版本的Oracle的连接。当我做类似的事情时,我可能会让人在表中 员工 然后我会有一个带有列的表management manager\u id和employee\u id 两列都引用employee.id(因为经理也是员工,明白吗?) 这样,您就可以为每个员工创建一个指向

我有一个employee表,其中包含一个经理ID作为列。如果我需要找某个员工的经理,我将如何有效地做到这一点?如果我们需要一个5层的深度呢


如果这是一项要求,我们可以更改数据库模式以提高效率吗?

请阅读,了解如何通过自定义定义自己版本的Oracle的
连接。

当我做类似的事情时,我可能会让人在表中
员工

然后我会有一个带有列的表
management
manager\u id
employee\u id

两列都引用employee.id(因为经理也是员工,明白吗?)

这样,您就可以为每个员工创建一个指向其经理的
管理
条目,并对每个经理执行相同的操作,等等。。。它将深入到你需要的任何层次


编辑:真的,我假设您会有另一个表
managerdata
,其中包含关于每个经理的附加数据,但我不会复制
员工
中的数据-只需添加有关经理的额外详细信息,并包含一列指向
员工.id

我能想到的唯一方法就是根据需要进行递归。一个简单的例子是:

///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

注意:未测试

您是否可以动态创建查询以确定需要向上查询多少人?您当前的架构是什么样的,将经理与员工关联起来?员工是否只有一个经理,或者你支持矩阵员工吗?我不明白为什么会投反对票。假设我们有一个员工表,其中有一个经理ID作为列…..所以同一个表包含员工和他们的经理…..这也是一个面试官问我的问题一个好主意,我被指数增长吓跑了(添加一名员工,需要更新每个人与该员工/经理的链接);但如果他经常这样问会更快。我不明白你的逻辑。如果你添加一名员工,你只需将他们作为员工插入,然后为他们的经理和任何直接下属添加一行。例如,总裁将没有与看门人的链接,只与他正下方的人(副总裁等)链接.哦,我看错了你的帖子。听起来你会给公司里的每一个人排一行,解释他们相对于插入的员工的位置。而不仅仅是直接在上面和下面的员工。我知道这听起来是怎么回事,是的,这并不理想。我的数据库目标是允许存储尽可能少的数据可以说明整个情况。如果我想了解数据的复杂情况,那就是聪明的查询和智能脚本的用途。