首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP MYSQL深度查询

PHP MYSQL深度查询
EN

Stack Overflow用户
提问于 2013-12-05 00:14:04
回答 1查看 195关注 0票数 0

我是新来的,我觉得很迷茫。这段代码是在做无限循环吗?

我应该删除第2-4行吗?第19行“$_row‘’employee_manager_id‘”是否很重要?

我该怎么做有什么建议吗?谢谢。

代码语言:javascript
复制
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_manager_id'],
                      $_depth,
                      $_org_array
                    );
      }
  return $_org_array;
  }
EN

回答 1

Stack Overflow用户

发布于 2013-12-05 00:28:51

从外观上看:

它做了一个无限循环。,,

  1. 。递归没有终止条件。您需要一个导致此问题的条件:

$_org_array = $this->get_employees_by_hierarchy( $_row['employee_manager_id'], $_depth, $_org_array );

不运行,或者至少将它分配给不是get_employees_by_hierarchy的东西。

在你修复这个问题之后,如果一个员工是他们自己在某个point.

  • Impossible的经理,那么就会有一个无限的循环,也就是说,“深度”在其他地方使用了吗?此函数返回具有‘$_org_array’字段的深度,但我们无法查看是否使用了该字段。它当然没有破坏代码中的任何东西,

  • ,没有看到样本数据,我会说,是的,这很重要。代码使用自引用employees表递归,使用经理的id作为层次结构的下一层。在分配检查经理id是否为空的$_org_array之前,

  • 会进行检查,如果发生这种情况,请执行以下操作:$_org_array = $this.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20380357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档