質問

フィールドを含むポストテーブルがあるとします post_idparent_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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top