如何以递归方式获取此MySQL表中行的"父ID"?

cic*_*man 2 php mysql recursion

我的数据库看起来像(pligg cms,示例数据)

id  catID parentID   catName
1    1      0        location
2    2      0        color
3    3      1        USA
4    4      3        Illinois
5    5      3        Chicago
6    6      2        Black
7    7      2        Red
Run Code Online (Sandbox Code Playgroud)

比方说,我如何获得芝加哥的顶级parentID,它应该是位置.

我在php中编写递归函数还是在mysql中可行?

GWW*_*GWW 6

这个网站非常好地概述了在mysql和PHP中存储分层数据的不同方法.要回答你的问题,最简单的方法是使用php和递归.您可以使用其他方法,例如modified preorder transversal,不需要多个数据库查询.但是,在处理大量插入和更新时,这种方法可能会更复杂.

另一个非常酷的方法和我个人最喜欢的是所谓的"闭包表"/"邻接​​关系"中提到的什么是将平板表解析成树的最有效/优雅的方法?

关于你的评论你基本上必须做一个循环或递归函数,选择芝加哥的父母,然后父母的父母,依此类推.

$stack = array();
$parent = 3;
while($parent != 0){
    $data = (put your mysql to get the row with parentID = $parent)
    $parent = data['parentID'];
    $stack[] = $data;
}

$stack = array_reverse($stack);
Run Code Online (Sandbox Code Playgroud)

堆栈将包含芝加哥的父母(即位置,美国)