id msg parent
===============
1 a NULL
2 b 1
3 あ NULL
4 A NULL
5 B 4
6 C 5
7 い 3
8 う 7
9 c 2
または親子関係を別テーブルに分けて
id msg
=======
1 a
2 b
3 あ
4 A
5 B
6 C
7 い
8 う
9 c
parent child
=============
1 2
2 9
3 7
4 5
5 6
7 8
これで (1, a), (2, b), (9, c) のように親子関係のあるレコードを一度に取得したい
世代数が固定ならその数だけ JOIN させれなくもないけど 可変だと再帰的に見ていくわけで クエリ 1 つじゃ無理?
テーブル定義を変えて 親子関係をグループとして考えて 親子関係は同じグループ id を持つようにする
id msg gid
============
1 a 1
2 b 1
3 あ 2
4 A 3
5 B 3
6 C 3
7 い 2
8 う 2
9 c 1
親がないなら新規にグループ id を作って 親がいるならそのグループ id を引き継ぐ
どっちが子かは id が大きいほど子としてもいいし seq みたいな列を追加でもいい
親子が 1:1 ならこれで大丈夫そうだけど どちらかもしくは両方が複数になると難しそう
RDB 上のレコードの親子関係なら たいていは変更前の値などで 1:1 にしかならない気もするけど