gpt4 book ai didi

PHP MySQL层次结构数据优化

转载 作者:行者123 更新时间:2023-11-30 22:55:16 24 4
gpt4 key购买 nike

我有一张员工表,其中包含列:employee_idnameemployee_manager_idemployee_manager_id 引用 employee_id。这是一个分层数据。

我使用 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 查询中不可能,我当前的代码是否还有优化?

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

您可以尝试嵌套集 a.k.a. celko 树,但插入和删除非常昂贵。还有闭包和路径枚举(物化路径),但我不是专家。 MySql 不支持递归查询。

关于PHP MySQL层次结构数据优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26679440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com