3

假设我有一个包含字段post_idparent_post_id. 我想返回帖子表中的每条记录,并计算帖子的“深度”。我的意思是,存在多少父记录和祖先记录。

以这些数据为例...

post_id   parent_post_id
-------   --------------
1         null
2         1
3         1
4         2
5         4

数据代表这个层次结构......

1
|_ 2
|  |_ 4
|     |_ 5
|_ 3

查询的结果应该是...

post_id   depth
-------   -----
1         0
2         1
3         1
4         2
5         3

提前致谢!

4

1 回答 1

0

如果您要进行大量这样的查询,您可能会发现嵌套集模型比您询问的邻接列表更合适。这里对这两种模型都有很好的讨论。

无论如何,要使用邻接列表执行您所要求的操作,您正在查看应用程序层中的递归,或者将级别存储为第 3 列。

ETA:如果您的级别数不是很高,您可以使用自联接来做到这一点:

例如具有 2 个祖先的节点:

SELECT t1.node 
FROM mytable AS t1
JOIN mytable AS t2 ON t1.parent = t2.node
JOIN mytable AS t3 ON t2.parent = t3.node
WHERE t3.parent IS NULL;
于 2010-05-13T02:08:55.323 回答