我有一個表名員工,其中包含列:EMPLOYEE_ID,名,employee_manager_id。 employee_manager_id參考employee_id。這是一個分層數據。PHP MySQL的層次數據優化
我有這個輸出使用PHP,但不能實現它只使用一個mySQL查詢。到目前爲止,我需要使用遞歸函數在PHP中處理數據,以便實現這種輸出。
Sample Array Output
0 => (
employee_id => 2,
name => Jerald,
employee_manager_id => 1,
depth => 1
),
1 => (
employee_id => 3,
name => Mark,
employee_manager_id => 2,
depth => 2
),
2 => (
employee_id => 6,
name => Cyrus,
employee_manager_id => 3,
depth => 3
),
3 => (
employee_id => 4,
name => Gerby,
employee_manager_id => 2,
depth => 2
)
截至目前,這是我在PHP中實現上述輸出的遞歸函數。
function get_employees_by_hierarchy($_employee_id = 0, $_depth = 0, $_org_array = array()) {
if ($this->org_depth < $_depth) {
$this->org_depth = $_depth;
}
$_depth++;
$_query = "SELECT * FROM employees WHERE ";
if (!$_employee_id) {
$_query .= "employee_manager_id IS NULL OR employee_manager_id = 0";
}
else {
$_query .= "employee_manager_id = " . $this->dbh->quoteSmart($_employee_id);
}
$_result = $this->query($_query);
while ($_row = $_result->fetchRow()) {
$_row['depth'] = $_depth;
array_push($_org_array, $_row);
$_org_array = $this->get_employees_by_hierarchy(
$_row['employee_id'],
$_depth,
$_org_array
);
}
return $_org_array;
}
我的問題是,反正是有這樣我就可以只用一個MySQL查詢得到陣列輸出我想要什麼? 如果在MySQL查詢中不可能,那麼在我當前的代碼中是否有優化?
任何幫助將不勝感激。
感謝
我可以爲此寫一個很好的答案,但有很多博客文章已經非常徹底地涵蓋了這個問題。看看http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/爲更常見的選項之一 – 2014-10-31 17:14:51