我有一个表格,它定义了我网站中可能的类别 - 字段看起来像这样:
- id - name - parentID
信息是这样存储的:
+-----+------+----------+ | id | name | parentID | +-----+------+----------+ | 1 | pets | 0 | +-----+------+----------+ | 2 | cats | 1 | +-----+------+----------+ | 3 | dogs | 1 | +-----+------+----------+
parentID
为 0 表示类别/页面位于主页级别。我正在寻找一种快速轻松地生成父类别的方法。
我想到的第一个方法是一系列 SQL 查询,但我很快意识到,网站越复杂,这种方法就会消耗更多资源。
通过阅读 mysql 手册,我看到 mysql 可以使用循环和条件语句,但是我不确定我将如何在此处将它们付诸实践。
理想情况下,我想要一个查询来提取所有直接相关的父元素。
如果我查看 Pets 类别,我只会看到 home
,因为它位于顶层。一旦我向下钻取(cats
、dogs
或 pets
下的页面),我应该会看到 pets
在栏上 - 随后的子类别和页面也是如此。
使用以这种方式存储的信息生成类别列表的最有效方法是什么?如果此问题需要更多说明,请询问,我会尽力提供更多信息。
澄清:这是 CMS 的一部分 - 因此,用户需要能够即时更改类别。我研究了几种数据存储方案(例如嵌套集),它们似乎不太适合用于更改导航的简单表单。
因此,任何方法都需要易于 a) 用户理解,以及 b) 易于用户实现。
最好将类别描述为 PC 上的文件夹,而不是标签。当您查看任何给定类别时,您可以看到该类别的直接子级以及直接子级页面。
当您查看类别或页面时,父类别(但本身不可见)。
示例:我有 German Shepard,它位于 dogs 之下,位于 pets
When viewing *pets*: Home When viewing *dogs*: Home -> Pets When viewing *German Shepard*: Home -> Pets -> Dogs
最佳答案
考虑改用“嵌套集”模型:Managing Hierarchical Data in MySQL .
更新(基于对问题的澄清):嵌套集模型不必(事实上我很难想象为什么会)暴露给最终用户。嵌套集模型可以支持所有目录式操作(添加新文件夹/子文件夹;将文件夹移动到不同的路径等),尽管有些操作比其他操作更难实现。我链接到的文章提供了添加和删除(子)文件夹的示例。
关于php - 在 MySQL 中构建面包屑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1191171/