我在桌子上有一個樹形結構,它使用物化路徑讓我快速找到孩子。不過,我還需要對結果進行深度優先排序,正如人們期望的線程論壇回覆一樣。使用物化路徑對樹進行排序?
id | parent_id | matpath | created
----+-----------+---------+----------------------------
2 | 1 | 1 | 2010-05-08 15:18:37.987544
3 | 1 | 1 | 2010-05-08 17:38:14.125377
4 | 1 | 1 | 2010-05-08 17:38:57.26743
5 | 1 | 1 | 2010-05-08 17:43:28.211708
7 | 1 | 1 | 2010-05-08 18:18:11.849735
6 | 2 | 1.2 | 2010-05-08 17:50:43.288759
9 | 5 | 1.5 | 2010-05-09 14:02:43.818646
8 | 6 | 1.2.6 | 2010-05-09 14:01:17.632695
所以,最後的結果實際上應該排序是這樣的:
id | parent_id | matpath | created
----+-----------+---------+----------------------------
2 | 1 | 1 | 2010-05-08 15:18:37.987544
6 | 2 | 1.2 | 2010-05-08 17:50:43.288759
8 | 6 | 1.2.6 | 2010-05-09 14:01:17.632695
3 | 1 | 1 | 2010-05-08 17:38:14.125377
4 | 1 | 1 | 2010-05-08 17:38:57.26743
5 | 1 | 1 | 2010-05-08 17:43:28.211708
9 | 5 | 1.5 | 2010-05-09 14:02:43.818646
7 | 1 | 1 | 2010-05-08 18:18:11.849735
如何將我的工作說出來?我可以用直接SQL(這是PostgreSQL 8.4)來做到這一點嗎?還是應該將其他信息添加到此表中?
更新:試圖更好地解釋排序標準。
想象一下,ID'1'是論壇的根帖,而以'1'開頭的'matpath'是該帖子的子項。所以ids 2到5是直接回復1並獲得'1'的matpath。但是,id 6是回覆2,而不是直接回復1,所以它獲得了1.2的matpath。這意味着,對於螺紋論壇與適合的套裝,與表中所示的所有ID,論壇的結構是這樣的,因此訂貨要求:
* id 1 (root post)
* id 2
* id 6
* id 8
* id 3
* id 4
* id 5
* id 9
* id 7
我擴展了根帖以解釋排序要求。對困惑感到抱歉。 – Ovid 2010-05-09 13:31:17
@Ovid:好的,有道理。我會解釋如何去做。 – RedFilter 2010-05-09 13:42:42
剛剛補充說。奇蹟般有效。謝謝。 – Ovid 2010-05-09 14:39:04