MySQL& PHP使用parent_id获取层次结构中项目的深度

时间:2011-09-25 15:04:56

标签: php mysql

我有一个使用parent_id作为层次结构的公共数据库结构。

我正试图找出物品的深度。

以此为例:

ID  Name    Parent_id
1   Games   0
2   Nintendo    1
3   DS  2
4   3D  3

如果我想找出ID 4(3D)的深度,答案是3.我知道如何查询这个或者sql和php的组合吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

你有一个天真的实施?你在找最好的方式吗?树是递归的,所以我认为你将像树高一样查询数据库。

这个伪php

function getHeigth($item_name) {
    $res = 0;
    $current_parent_id = executeSql("SELECT parent_id FROM games g WHERE g.name= ? " , $item_name);
    while ($current_parent_id != 0) {
        $current_parent_id = executeSql("SELECT parent_id FROM games g WHERE g.id = ? " , $current_parent_id);
        $res = $res + 1;
    }
    return $res;
}

如果你的三个不平衡,这个算法会表现不好。

存储深度会提高性能,但会影响UPDATE和INSERT查询。

此外,如果您的树被破坏,这个Psuedo-PHP可以永远循环

答案 1 :(得分:1)

获得深度的更好方法是将其与数据一起存储在单独的字段中。

更好的方法是使用更智能的方式存储分层数据,例如嵌套集或物化路径。

虽然你可以从当前的表格设置中获得深度,但这当然是最丑陋的方式,递归。 但是,如果你的桌子相对较小,虽然

不会有什么大不了的