像递归函数一样使用查询选择祖先

Joe*_*Joe 4 mysql database

我有一个数据库表菜单,其中包含id, name and parentid.

我在数据库中有以下值,我想使用查询收集所有字段,包括父菜单。

   id  name      parentid
   1   File         0
   2   New          1
   3   Document     2
   4   Image        2
   5   Edit         0
   6   Copy         5
   7   Paste        5
Run Code Online (Sandbox Code Playgroud)

示例:我有 2 作为我的当前菜单,我想选择所有具有父级Id 2及其父级和父级父级的字段,直到我到达顶级父级(即parentid=0)。

是否可以使用单个查询来收集它?如果是,如何实现?

Dav*_*ele 5

如果您可以控制您的数据结构,那么有一种更好的方法来存储这些数据,然后您就可以做您需要做的事情,而且这比尝试照原样进行要容易得多。

您正在做的事情通常称为邻接表模型。您应该查看嵌套集模型,这是一种更有效的存储和检索分层数据的方法。

这里有一个很好的教程 ,在网上快速搜索Joe Celko将为您提供许多正确方向的链接,因为他多年来一直在撰写有关此内容的文章。

希望这可以帮助

  • “更有效的方式”——这是一个非常值得讨论的短语。NS 在经常进行树修改时**性能较低**。 (2认同)