通过路径查找Mysql分层数据

时间:2011-03-30 20:57:31

标签: php mysql

关注Managing Hierarchical Data in MySQL, 我已经很好地实现了分层数据的使用,但是我已经要求我使用类似文件夹结构的路径添加功能来检索数据。

我甚至不确定如何开始这样做。

我已经尝试将路径扩展到各个段并进行循环以构建SQL查询以便以这种方式进行搜索,但速度非常慢。

我是否正确接近这个问题,请你给我任何建议或帮助链接吗?我搜索了几个星期,发现没有任何相关的内容,所以我猜这不常见。

1 个答案:

答案 0 :(得分:1)

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

向表中添加“路径”列,该列将根目录中的路径存储为varchar。确保在该列上放置索引。 例如:'ELECTRONICS> PORTABLE ELECTRONICS> MP3播放器> FLASH'

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

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

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