3
employee id reporting_head_id
----------------------------------
1           0
2           1
3           1
4           2
5           2   
6           3
7           4
8           5
9           6

假设我希望所有员工在emp_id=1.

所以我可以从

select * from employee where reporting_head_id=1

它将返回 2 和 3。

但我也想搜索那些向他们汇报的员工2等等3。以及向 2 和 3 报告的员工,假设那些报告员工也有一些员工报告,所以我也想要他们的信息等等。

我想要给定的所有员工reporting_head_id 以及向.employees reportinggiven id

现在如果我搜索下属的员工reporting_head_id 1employees 2,3,4,5,6,7,8,9应该会被退回

请你能给我解决方案。我是新手SQL

我试过这个查询

SELECT * 
FROM employee 
WHERE reporting_head_id = 1 
   or reporting_head_id = any (select id from employee where reporting_head_id = 1)

所以它返回 2,3,4,5,6

但是如何找到向 4、5、6 等报告的人

4

3 回答 3

0

这将为递归函数提供一些想法。一旦我们有了这个想法,我们就可以让代码变得更简单。

$qry = "SELECT * FROM employee WHERE reporting_head_id=1";
$rec = mysql_query($qry);
while($row = mysql_fetch_array($rec)){
    $id = $row['empid'];
    $arr[] = $id;
    foreach(rec($id) as $key=>$val){
        $arr[] = $val;
        $arr[] = rec($val);
        rec($val); 
    }
}

function rec($id){
    $qry = "SELECT * FROM emp WHERE reporting_head_id=$id";
    $rec = mysql_query($qry);
    while($row = mysql_fetch_array($rec)){
        $arec[] = $row['empid']; 
    }
    return $arec;

}
print_r($arr); //This array will contain the  reporting_head_id plus those employees who report to the employees reporting to the given id.
于 2012-12-20T06:46:23.117 回答
0

我没有尝试过,但我相信这是您正在寻找的一个例子:http: //blog.sqlauthority.com/2012/04/24/sql-server-introduction-to-hierarchical-query-using-a -recursive-cte-a-primer/

不幸的是,我认为这在 mySQL 中不可用。但是,我发现以下两个我认为相似的问题会给您一个起点:

使用查询(如递归函数)选择祖先

递归 MySQL 查询

于 2012-12-20T06:10:37.293 回答
0

除了一个 foreach 循环,它会查询你的添加结果,我不确定。

尝试:

"SELECT * FROM employee WHERE reporting_head_id=1"

然后取结果并:

foreach($employees as $employee)
{
    "SELECT * FROM employee WHERE reporting_head_id=".$employee;
}
于 2012-12-20T05:39:34.340 回答