2011-03-30 18 views
1

以下Managing Hierarchical Data in MySQL, 我已经实现了分层数据的使用,但它已被要求添加功能以使用路径(如文件夹结构)检索数据。通过路径查找Mysql分层数据

我甚至不知道如何开始这样做。

我已经尝试将路径分解为单独的段,并执行一个循环来构建SQL查询以便以这种方式进行搜索,但速度非常慢。

我是否正确接近,请给我任何建议或链接帮助,请吗?我搜索了几个星期,并没有发现任何与此相关的信息,所以我猜这不是一种常见的做法。

回答

1

链接的分层数据文档具有基于同一个表上多个连接的实现。如果这太慢了,那么有一个简单的解决方案不是“纯粹”的,而是应该工作得更快:

向您的表添加一个“路径”列,用于存储从根到路径类别作为varchar。确保您在该列上放置索引。 例如:'电子产品>便携式电子产品> MP3播放器>闪存'

我使用'>'作为类别名称之间的分隔符 - 确保您使用的任何内容不会作为任何类别的一部分出现。

现在为了使用它的绝对路径检索记录,您可以使用分隔符构造路径并查询完全匹配。您还可以通过使用LIKE查询并提供路径前缀来查找具有单个快速查询的整个子树。

请注意,您也可以在路径后缀中使用LIKE查询来查询相对路径,甚至可以使用正则表达式来做一些疯狂的事情。但这些会很慢。但是,您可以添加更多列 - 例如反向路径(FLASH> MP3 PLAYERS> PORTABLE ELECTRONICS> ELECTRONICS)将允许在路径后缀上进行快速查询。

+0

这就是我基于我的初始循环,但我想知道是否有一个更有效的方式或我所做的是正确的? – Jase 2011-03-30 21:04:11

+0

@Jase我明白了。有一个更高效(尽管不太“标准化”)的解决方案,我过去成功地使用了它。我会编辑答案。 – Elad 2011-03-30 21:12:30

+0

非常感谢。我知道如何检索指定的子节点的所有父母,所以这应该很好。这应该比我现在拥有的速度要快得多。我期待着更复杂的方式,所以感谢你这个简单而优雅的解决方案 – Jase 2011-03-30 21:32:02