我有一个使用parent_id作为层次结构的公共数据库结构。
我正试图找出物品的深度。
以此为例:
ID Name Parent_id
1 Games 0
2 Nintendo 1
3 DS 2
4 3D 3
如果我想找出ID 4(3D)的深度,答案是3.我知道如何查询这个或者sql和php的组合吗?
谢谢!
答案 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)
获得深度的更好方法是将其与数据一起存储在单独的字段中。
更好的方法是使用更智能的方式存储分层数据,例如嵌套集或物化路径。
虽然你可以从当前的表格设置中获得深度,但这当然是最丑陋的方式,递归。 但是,如果你的桌子相对较小,虽然
不会有什么大不了的