2010-05-13 68 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