2010-05-13 71 views
3

说我有包含的字段post_idparent_post_id后表。我想用帖子的“深度”计数来返回帖子表中的每条记录。我的意思是深度,有多少父母和祖先记录存在。MySQL中获取的纪录,计数父母和祖先记录深度

拿这个数据例如...

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 

提前致谢!

+0

刚刚发现这个帖子。好像我被困在保持自嵌套模式的列深度是不恰当的:http://stackoverflow.com/questions/1195863/mysql-calculate-depth-in-a-parent-child-model – Nate 2010-05-13 02:17:11

回答

1

如果你赚了很多这样的查询,您可能会发现一组嵌套模式比你问的是邻接表更合适。这两种型号都有很好的讨论here

在任何情况下,做你的要求与邻接表你正在寻找在应用层要么递归或存储级别的第三列。

埃塔:如果你的等级数是不是非常高,你可以用自己做联接:

例如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; 
+0

我有问题嵌套集合是生病做了很多插件,我不想要做吨左右指数的调整。我想你是对的,我只需要将深度存储在一列中并进行维护。游民。 – Nate 2010-05-13 02:14:45

+0

@Nate:检查我的ETA。如果深度不过大,这并不太可怕。 – dnagirl 2010-05-13 02:17:38