在MPTT中,如何在使用MySQL的节点中找到特定级别的祖先?

时间:2017-07-17 14:08:51

标签: mysql hierarchical-data

有关MPTT的解释,请参阅https://www.sitepoint.com/hierarchical-data-database-2/

我有一个存储与上面链接相同的分层数据的表,除了它有一个名为level的附加列来存储MPTT的深度,其中0级用于根节点,并且数字增加了后代节点。

假设我正在使用MySQL,那么在给定节点和我们想要的级别的情况下获取祖先节点的查询是什么?

E.g。在一个4级分层表中,意思是0-3级,我给你一个3级的特定节点,我想在1级找到它的祖先

如何编写类似的查询?

更新

我被错误地指责重复这个问题How to create a MySQL hierarchical recursive query我会更清楚地说明我的问题是如何不同的:

这个问题是问我,我引用“找到它的孩子ids”。我正在寻找相反的结果。

我在给定节点的情况下寻找特定级别的祖先节点。这部分问题很大胆。我甚至在我的问题标题中都说过。

如果我找到一个要求完全相同的副本,我将很乐意删除这个问题。

让我修改http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/中的示例以使其更清晰

enter image description here

+-------------+----------------------+--------+------+----+-----+
| 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(便携式电子设备)

我希望能让它变得更加清晰。

0 个答案:

没有答案