在MySQL中构建面包屑

Evi*_*kie 0 php mysql performance

我有一个表格来定义我网站中可能的类别 - 字段看起来像这样:

  - id
  - name
  - parentID

信息存储如下:

+-----+------+----------+
| id  | name | parentID |
+-----+------+----------+
|  1  | pets |        0 |
+-----+------+----------+
|  2  | cats |        1 |
+-----+------+----------+
|  3  | dogs |        1 |
+-----+------+----------+

A parentID为0表示类别/页面位于本地级别.我正在寻找一种快速轻松生成父类别的方法.

想到的第一个方法是一系列SQL查询,但我很快意识到,这将是潜在的资源密集,网站越复杂.

通过阅读mysql手册,我已经看到mysql可以使用循环和条件语句,但是我不确定我是如何在这里实践的.

理想情况下,我希望有一个查询来提取所有直接相关的父元素.

如果我正在看宠物类别,我只会看到home它,因为它在顶级.一旦我向下钻取(或者进入cats,dogs或者在页面下面pets),我应该pets在条形图上看到- 后续的子类别和页面也是如此.

使用以这种方式存储的信息生成类别列表的最有效方法是什么?如果这个问题需要更多说明,请询问,我会尽力提供更多信息.

澄清:这是CMS的一部分 - 因此,用户将需要能够动态更改类别.我已经研究了几种数据存储方案(例如嵌套集),它们似乎不适合用于更改导航的简单形式.

因此,任何方法都需要容易地a)用户理解,并且b)容易地实现给用户.

这些类别最好在PC上描述为文件夹,而不是标签.查看任何给定类别时,您可以看到该类别的直接子项以及直接子页面.

查看类别或页面时,父类别(但不是可见的).

例如:我有德国谢泼德,它存在于宠物下的身下

When viewing *pets*:           Home
When viewing *dogs*:           Home -> Pets
When viewing *German Shepard*: Home -> Pets -> Dogs

Chs*_*y76 5

请考虑使用"嵌套集"模型:在MySQL中管理分层数据.

更新(基于对问题的澄清):嵌套集模型不必(实际上我很难想象它为什么会暴露给最终用户).在嵌套集模型中可以支持所有目录样式的操作(添加新文件夹/子文件夹;将文件夹移动到不同的路径等等),尽管有些操作比其他操作更难实现.我链接的文章提供了添加和删除(子)文件夹的示例.

  • 您可以根据需要显示数据,并在幕后使用嵌套集. (2认同)