あなたの具体化された道は正しくないと思います。
このようなものを並べ替えるには、どのようなロジックが必要ですか
1
1.2
1
1.5
2番目の1が最初の1と一緒になっていないのはなぜですか?
持っていた場合
1
1.2
2
2.5
これは些細なことです。
編集:私はあなたの例を見ました、そしてあなたは行のマテリアライズドパスを保存していませんが、あなたは親行のマテリアライズドパスを保存しています。これが行のマテリアライズドパスが実際にどのように見えるべきかです。次のように保存した場合、ブランチが9つを超えない場合は、matpathで直接並べ替えることができます。
id | parent_id | matpath | created
----+-----------+-----------+----------------------------
2 | 1 | 1.2 | 2010-05-08 15:18:37.987544
6 | 2 | 1.2.6 | 2010-05-08 17:50:43.288759
8 | 6 | 1.2.6.8 | 2010-05-09 14:01:17.632695
3 | 1 | 1.3 | 2010-05-08 17:38:14.125377
4 | 1 | 1.4 | 2010-05-08 17:38:57.26743
5 | 1 | 1.5 | 2010-05-08 17:43:28.211708
9 | 5 | 1.5.9 | 2010-05-09 14:02:43.818646
7 | 1 | 1.7 | 2010-05-08 18:18:11.849735
それ以外の場合(> 9)は、matpath
をオンにする必要があります
001.002.006
001.002.006.008
最大999のブランチをサポートします。
注意してください
-
0001.0002.0006
のように、4桁の固定数字を使用するアプローチでも 受け入れられた回答よりも短いフィールドが表示されます - ユーザー関数を使用して、matpathを解析し、その場でソート値を生成することができます
- matpathをこの形式で直接保存できます(他にもいくつかの優れたプロパティがあります)