次のデータがあるとします。
id | parent | sort
--------------------
1 | null | 0
2 | null | 1
3 | 1 | 0
4 | 1 | 1
5 | 3 | 0
6 | 5 | 0
7 | 2 | 0
予約注文の並べ替えを行うにはどうすればよいですか。つまり、最初に親、次に子供、次に孫など...?
私が探しているソート結果は次のとおりです: 1, 3, 5, 6, 4, 2, 7
可能であれば、CTE(または理解できるCTE)を使用せずにこれを行いたいと思います。私が現在行っている方法は、すべてのレコードを選択し、「上向き」にチェックして、親、祖父母、および曽祖父母が存在するかどうかを確認することです。親を持たないレコード (上位項目) に対して何かを行い、子がなくなるまでそれを続ける方が理にかなっていますよね?
私はこれについて頭を包むことができません...
これは私の実際のクエリを単純化しすぎていますが、現在行っていることは次のようなものです。
SELECT ..some columns ..
FROM table t
LEFT JOIN table tparent WHERE tparent.ID = t.Parent
LEFT JOIN table tgrandparent WHERE tgrandparent.ID = tparent.Parent
LEFT JOIN table tgreatgrandparent WHERE tgreatgrandparent.ID = tgrandparent.Parent