首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成存储在MySQL中的类别的面包屑

问生成存储在MySQL中的类别的面包屑
EN

Stack Overflow用户
提问于 2009-09-29 23:31:03
回答 3查看 3.8K关注 0票数 7

在MySQL中,我这样存储类别:

分类:- category_id - category_name - parent_category_id

为给定的category_id生成路径/面包屑最有效的方法是什么?

例如,面包屑(Category_id):常规>子1>子2

理论上可能有无限的水平。我正在使用php。

更新:我看到了这篇关于嵌套设置模型的文章(http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/)。它看起来很有趣,但是你是如何动态管理类别的呢?它在纸面上看起来更容易,比如当你提前知道类别时,但当用户可以动态创建/删除/编辑类别时就不是这样了……你认为如何?

EN

回答 3

Stack Overflow用户

发布于 2009-09-30 00:06:10

我喜欢使用Materialized Path方法,因为它实际上包含了您的面包屑轨迹,并且可以很容易地完成一些事情,比如不使用递归查询来选择节点的所有子节点。

物化路径模型

物化路径模型的思想是将层次结构中的每个节点与其在树中的位置联系起来。这是通过连接所有节点祖先的列表来完成的。此列表通常存储在分隔字符串中。请注意下面的“Linage”字段。CAT_ID NAME CAT_PARENT Lineage 1 Home . 2 product 1 .1 3 CD’s 2 .1.2 4 LP’s 2 .1.2 5 Artists 1 .1 6 Genre 5 .1. 5 7 R&B 6 .1. 5.6 8 Rock 6 .1. 5.6 9 About Us 1 .1

遍历表的

代码语言:javascript
复制
Select lpad('-',length(t1.lineage))||t1.name listing
From category t1, category t2
Where t1.lineage like t2.lineage ||'%'
    And t2.name = 'Home';
Order by t1.lineage;

列表

代码语言:javascript
复制
Home
-product
–CD’s
–LP’s
-Artists
–Genre
—R&B
—Rock
-About Us
票数 1
EN

Stack Overflow用户

发布于 2009-09-29 23:43:57

从传统的父模型生成它(无论您喜欢什么),并将其缓存。动态生成它的成本太高,而且对层次结构的更改通常比其他更改少几个数量级。我不会为嵌套的集合模型而烦恼,因为层次结构会发生变化,然后你就不得不去摆弄左边和右边的东西了。(请注意,这篇文章只包括添加和删除的食谱-而不是重新为人父母-这在父模型中非常简单)。

票数 0
EN

Stack Overflow用户

发布于 2009-09-30 00:17:47

嵌套集的美妙之处在于,只需几个简单的SQL语句,您就可以轻松地在图中添加/删除节点。它真的不是那么昂贵,而且可以很快地进行编码。

如果您碰巧正在使用PHP (或者不使用PHP),那么您可以查看这段代码来了解一个相当简单的adding nodes to a nested set model (archive.org backup)实现。移除(甚至移动)也同样简单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1495460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档