在mysql中查找子报告员工

时间:2012-12-20 05:32:44

标签: mysql sql

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。

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

我希望所有员工都为给定的reporting_head_id 那些向employees reporting报告given id的员工。

现在,如果我搜索向reporting_head_id 1举报的员工,employees 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等的人

3 个答案:

答案 0 :(得分:0)

除了foreach循环,然后查询您的添加结果在#39;我不确定。

尝试:

"SELECT * FROM employee WHERE reporting_head_id=1"

然后取结果并:

foreach($employees as $employee)
{
    "SELECT * FROM employee WHERE reporting_head_id=".$employee;
}

答案 1 :(得分:0)

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

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

select ancestors using query like a recursive function

Recursive MySQL query

答案 2 :(得分: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.