使用mysqli查询从树状菜单中查找孩子的深度

时间:2015-08-14 16:14:43

标签: mysql

MYSQL TABLE

|id|parent_id|
|1 |        0| <- depth 1
|2 |        1| <- depth 2
|3 |        1| <- depth 2
|4 |        2| <- depth 3
|5 |        3| <- depth 3
|6 |        4| <- depth 4

我需要找出id 4的深度,在上面的例子中它是3

是否可以使用一个mysqli查询执行此操作? 如果没有,我怎么能用多个mysqli查询呢?

非常感谢。

EDITED

function find_depth($id, $depth = 0){
global $con;
$query = "SELECT * from table WHERE `id` = $id";
    if ($result = $con->query($query)){
        if (mysqli_num_rows($result) == 1){
            $row = $result->fetch_array();
            $depth = $depth + 1;
            find_level($row['parent_id'], $depth);
        } else {
            return $depth;
        }
    }
}

find_depth('4')

会给我3个

但是,我仍然在寻找更好的方法来实现这个目标

1 个答案:

答案 0 :(得分:0)

如果表格不大,则只能对DB进行一次查询

function find_depth($id, $depth = 0) {
  global $con;
  $temp = array();
  $query = "SELECT * from table";
  if ($result = $con->query($query)) {
     while($row = $result->fetch_array()) 
       $temp[$row['id']] = $row['parent_id'];
     do { $depth = $depth + 1; } while($id = $temp[$id]);
  }
  return $depth;       
}

find_depth('4');