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に報告している従業員は、それらの報告している従業員にも何人かの従業員が報告していると仮定するので、私も彼らの情報などが欲しいです。23

与えられたすべての従業員に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などに報告する人を見つける方法

4

3 に答える 3

0

私は試していませんが、これはあなたが探しているものの例だと思います: http://blog.sqlauthority.com/2012/04/24/sql-server-introduction-to-hierarchical-query-using-a -recursive-cte-a-primer/

残念ながら、これは mySQL では利用できないと思います。ただし、以下の 2 つの質問は類似していると思われ、出発点となることがわかりました。

再帰関数のようなクエリを使用して祖先を選択する

再帰的な 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 に答える
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 に答える