私はテーブルにツリー構造を持っており、それは私が子供を素早く見つけることを可能にするために具体化されたパスを使用しています。ただし、スレッド化されたフォーラムの返信で予想されるように、結果を深さ優先で並べ替える必要もあります。
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」を持つすべてのものがその投稿の子であると想像してください。したがって、ID 2から5は1への直接応答であり、「1」のマットパスを取得します。ただし、id 6は1への直接の応答ではなく2の応答であるため、1.2のマットパスを取得します。これは、すべてのIDが表に示されている、適切にネストされたスレッドフォーラムの場合、フォーラムの構造は次のようになることを意味します。したがって、順序付けの要件は次のとおりです。
* id 1 (root post)
* id 2
* id 6
* id 8
* id 3
* id 4
* id 5
* id 9
* id 7