有关MPTT的说明,请参见https://www.sitepoint.com/hierarchical-data-database-2/ .
我有一个存储与上面链接相同的分层数据的表,除了它有一个名为 level
的附加列来存储MPTT的深度,其中0级用于根节点,而后代节点的数量增加 .
假设我正在使用MySQL,那么在给定节点和我们想要的级别的情况下获取祖先节点的查询是什么?
例如 . 在一个4级分层表,意思是0-3级,我给你一个特殊的节点,它在3级,我想找到它 ancestors at level 1 only
我该如何编写这样的查询?
Update:
我被错误地指责重复了这个问题How to create a MySQL hierarchical recursive query我会更清楚地说明我的问题是如何不同的:
那个问题是问我,我引用“找到它的孩子ids” . 我正在寻找相反的观点 .
我正在寻找给定节点的 ancestors nodes at a particular level . 这部分问题很大胆 . 我甚至在我的问题 Headers 中说了很多 .
如果我找到一个要求完全相同的副本,我将很乐意删除这个问题 .
让我修改http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/中的示例以使其更清楚
+-------------+----------------------+--------+------+----+-----+
| category_id | name | parent | lft | rgt |level|
+-------------+----------------------+--------+-----+-----+-----+
| 1 | ELECTRONICS | NULL | 1 | 20 | 0 |
| 2 | TELEVISIONS | 1 | 2 | 9 | 1 |
| 3 | TUBE | 2 | 3 | 4 | 2 |
| 4 | LCD | 2 | 5 | 6 | 2 |
| 5 | PLASMA | 2 | 7 | 8 | 2 |
| 6 | PORTABLE ELECTRONICS | 1 | 10 | 19 | 1 |
| 7 | MP3 PLAYERS | 6 | 11 | 14 | 2 |
| 8 | FLASH | 7 | 12 | 13 | 3 |
| 9 | CD PLAYERS | 6 | 15 | 16 | 2 |
| 10 | 2 WAY RADIOS | 6 | 17 | 18 | 2 |
+-------------+----------------------+--------+-----+-----+-----+
我的问题将给出一个节点和祖先级别,给我祖先节点 . 换句话说,如果我给了节点8(也就是Flash)以及1级,我希望答案是6(便携式电子设备)
我希望能让它变得更加清晰 .