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 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等的人
答案 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中可用。但是我发现以下两个问题我认为是相似的,会给你一个跳跃点:
答案 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.