在MySQL中使用分层结构检索数据
给出下表在MySQL中使用分层结构检索数据,mysql,hierarchical-data,Mysql,Hierarchical Data,给出下表 id parentID name image 0 0 default.jpg 1 0 Jason 2 1 Beth b.jpg 3 0 Layla l.jpg 4 2 Hal 5 4 Ben 我想做以下工作: 如果我搜索Ben,我想找到图像,如
id parentID name image
0 0 default.jpg
1 0 Jason
2 1 Beth b.jpg
3 0 Layla l.jpg
4 2 Hal
5 4 Ben
我想做以下工作:
如果我搜索Ben,我想找到图像,如果没有图像,我想找到父母的图像,如果不存在,我想去祖父母的图像。。。直到我们点击默认图像
最有效的方法是什么?我知道SQL并不是为分层值设计的,但这正是我需要做的
干杯 也许有帮助。MySQL缺少递归查询,这是标准SQL的一部分。许多其他品牌的数据库支持此功能,包括PostgreSQL(请参阅) MySQL中有几种处理分层数据的技术
- 最简单的方法是添加一列来记录给定照片所属的层次结构。然后,您可以搜索属于同一层次结构的照片,将它们全部返回到应用程序中,并找出您需要的照片。这在带宽方面有点浪费,需要编写更多的应用程序代码,如果树中有很多节点,这就不好了
- 路径枚举存储每个节点的祖先列表。例如,示例中的照片5将存储“0-2-4-5”。您可以通过搜索节点来搜索祖先,这些节点的路径与“%”连接,与带有类似谓词的5的路径匹配
- 嵌套集是一种复杂但聪明的技术,Joe Celko在他的文章和他的书《Smarties的SQL中的树和层次结构》中推广了这一技术。关于它的在线博客和文章也很多。查询树很容易,但很难查询直接的子节点或父节点,也很难插入或删除节点
- 闭包表涉及将每个祖先/后代关系存储在单独的表中。如果添加pathlength列,则可以轻松查询树、插入和删除,以及查询直接父级或子级