当前位置: 首页 > 面试题库 >

如何递归获取此MySQL表中行的“父级ID”?

颛孙成益
2023-03-14
问题内容

我的数据库看起来像(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

假设,如何获取芝加哥的顶级parentID,它应该是位置。

我是否在php中编写了递归函数,或者在mysql中可行?


问题答案:

该网站非常好地概述了在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);

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



 类似资料:
  • 问题内容: 使用MySQL,我想从具有此类字段结构的表中返回父母列表。ID,PARENTID,NAME(标准的父子层次结构)。我想遍历树以返回所有“父母”的列表。 我意识到“嵌套集”可能是处理此问题的更好方法-但目前我无法更改数据的结构。我将来会希望这样做。当前-我的数据集实际上将包含一些深度级别- 没什么疯狂的……也许2-5,所以我的递归命中不应太“昂贵”。 我已经看过SQL Server获取父

  • 问题内容: 我有一张桌子 我填写这个表 选择idFolder = 1的文件夹时,应返回该文件夹和子子文件夹的所有子文件夹(2,3,4,5,6,7) 当我选择文件夹ID = 4 ==>(5,7,6) 当我选择文件夹ID = 3 ==>(4,5,6,7) 一个查询该怎么做? 谢谢 问题答案: 这是工作中的一个 在此处查看SQL固件:http://sqlfiddle.com/#!2 / 02b78 /

  • 我把这张桌子填满了 当选择IDFolder=1的文件夹时,应该为返回此文件夹的所有子文件夹和子文件夹(2,3,4,5,6,7) 当我选择文件夹id=4==>(5,7,6)时

  • 我想使用JOOQ递归地获取自引用表的父级和子级。 目标是直接在POJO中获取。 我没有在JOOQ留档或其他任何地方找到任何这样的例子,但我认为结合多集和递归JOOQ方法是可能的。https://www.jooq.org/doc/3.14/manual/sql-building/sql-statements/with-recursive-clause/https://www.jooq.org/doc

  • 问题内容: 在此表模式中: 我有一个父母,假设这张桌子: 父母是名为“ singapore”* 的 国家 对象。可以有多个嵌套的对象,是孩子们 盛港 随便怎么样都 盛港 是孩子 新加坡 。 *** 因此,一条等级链可能看起来像a-> b->盛港->新加坡 ->意思 是 如何获得所有以父级为新加坡的位置对象,包括父级对象(新加坡)?(请在SQLAlchemy中)。谢谢! 问题答案: SA文档:Que

  • 我的应用程序中有一个名为posts的实体。帖子可以是其他帖子的子帖子,因此父帖子有hasMany('Posts'),子帖子有hasOne('post')。包含是无限的。 以下是模式: 如何递归地获取“Post_id”设置为null的第一篇帖子的所有子帖子和子帖子的子帖子等? 请不要在这里评论性能,我知道这样的模式很糟糕,我只想知道如何正确编写递归函数来检索无限嵌套的帖子。