路径枚举mySQL查询以创建面包屑
作者:互联网
我想从枚举路径创建面包屑.
这是我拥有的数据集的示例.
id woeid parent_woeid country_code名称语言place_type祖先
祖先是列举的路径,例如1/23424975/24554868/12602167/12696151是布莱顿在英国的路径.
我希望能够通过查询名称列检索面包屑,并获得所有的父母.
即.世界,欧洲,英格兰,[县],[镇],[地区],[地方]
([] =占位符)
数据永不改变,这就是为什么该表使用邻接表和路径枚举的原因.
解决方法:
几种可能的方法.我将从您想做的事情,转到我建议您做的事情.
物化路径
不幸的是,枚举的路径祖先(例如,父母身份)为is expensive and tricky to do with SQL only(请参见“物化路径”部分中的“雇员福特及其上级主管链”).如果您提前准备好了路径并且可以使用某种编程语言,那么最简单的方法是使用IN子句:
SELECT *
FROM woe
WHERE ancestry IN (
'1',
'1/23424975',
'1/23424975/24554868',
'1/23424975/24554868/12602167',
'1/23424975/24554868/12602167/12696151'
)
ORDER BY LEN(ancestry)
邻接表
或者,您可以利用数据的“邻接表”方面,并根据数据库使用“公用表表达式”或“ CONNECT BY”(这将忽略祖先列).有关使用“邻接表”查询祖先的信息,请参阅我关于representing hierarchical data in an RDBMS的不同方式的问题(请参阅问题末尾的“数据库特定说明”部分).
嵌套集
您编写的数据没有更改,并且您想查询祖先.在这种情况下,嵌套集表示形式是一种理想的方法,因为仅使用SQL即可获取所需信息很容易,可与任何数据库一起使用,并且操作非常便宜.缺点是移动,插入昂贵.我可以提供Managing Hierarchical Data in MySQL的最佳解释,以说明其工作原理.
嵌套集是我要使用的给定您的数据,您想做什么以及它不会改变的功能.
标签:adjacency-list,hierarchical-data,mysql,model 来源: https://codeday.me/bug/20191023/1914136.html