-1

我有一张代表机构的表格。每个机构可能有也可能没有父母(fk_organismo)。没有父 (fk_organismo = NULL) 的机构是根机构。

表结构

任何人都可以帮助我使用可以构建完整分层树的php函数(递归或非递归),并且还可以接收可选参数:fk_organismo(parent_agency_id)。如果这个参数不为NULL,树应该从这个特定的机构开始建?

  1. 我必须在一棵树上展示所有机构
  2. 必须显示从特定代理开始的所有子代理的树

我还想我将不得不构建两 (2) 个单独的 SQL 查询,一个用于获取所有机构,另一个用于从特定机构获取所有孩子,但不确定......

非常感谢提前

4

1 回答 1

1

我在想这样的事情(已修复,经过测试)

$conn = new mysqli("hostname","user","password","database");
if($conn->connect_errno) {
    printf("Connect failed: %s\n",$conn->connect_error);
    exit();
}

function dbToTree(){
//Set up your connection to mysql first
    global $conn;

    $sql = "SELECT * FROM `database`.`table` WHERE `fk_organismo` IS NULL ORDER BY `id` ASC LIMIT 1000;";

    $result = $conn->query($sql);

    for($i = 0; $db_array[$i] = $result->fetch_array(MYSQLI_ASSOC); $i++);

    array_pop($db_array); //The last part of the array is empty, remove it

    foreach($db_array as $row => $columns){
        $db_tree[$columns['nombre']]['info'] = $columns; //Tree root is ID of agency

        $db_tree[$columns['nombre']]['children'] = find_children($columns['id']);
    }
    return $db_tree;
}

function find_children($fk_organismo){
        global $conn;
        $sql = "SELECT * FROM `database`.`table` WHERE `fk_organismo` = " . $fk_organismo . " ORDER BY id desc";
        //die($sql);
        $result = $conn->query($sql);
        if(!$result) return NULL;
        for($i = 0; $tmp[$i] = $result->fetch_array(MYSQLI_ASSOC); $i++);

        array_pop($tmp);
        foreach($tmp as $tmp_row => $tmp_columns){
            $return[$tmp_columns['nombre']]['info'] = $tmp_columns;
            $return[$tmp_columns['nombre']]['children'] = find_children($tmp_columns['id']);
        }
        if(empty($return)) return NULL;
        return $return;
}
于 2013-04-18T15:17:41.340 回答