記録の深さを得るためのmysql、親と祖先の記録を数える
質問
フィールドを含むポストテーブルがあるとします post_id
と parent_post_id
. 。ポストの「深さ」のカウントでポストテーブルのすべてのレコードを返したいと思います。深さとは、親と祖先の記録がいくつあるかということです。
たとえば、このデータを考えてみましょう...
post_id parent_post_id
------- --------------
1 null
2 1
3 1
4 2
5 4
データはこの階層を表しています...
1
|_ 2
| |_ 4
| |_ 5
|_ 3
クエリの結果は...
post_id depth
------- -----
1 0
2 1
3 1
4 2
5 3
前もって感謝します!
解決
このような多くのクエリを作成している場合、ネストされたセットモデルが隣接するリストよりも適切であることがわかります。両方のモデルについて良い議論があります ここ.
いずれにせよ、隣接するリストで求めていることを行うには、アプリケーションレイヤーの再帰を見ているか、レベルを3列目として保存しています。
ETA:レベルカウントがそれほど高くない場合、自己参加でそれを行うことができます:
EG 2つの祖先を持つノード:
SELECT t1.node
FROM mytable AS t1
JOIN mytable AS t2 ON t1.parent = t2.node
JOIN mytable AS t3 ON t2.parent = t3.node
WHERE t3.parent IS NULL;
所属していません StackOverflow