3

フィールド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

前もって感謝します!

4

1 に答える 1

0

このようなクエリをたくさん行う場合は、質問している隣接リストよりも入れ子集合モデルの方が適切であることがわかる場合があります。ここで両方のモデルについての良い議論があります。

いずれにせよ、隣接リストを使用して要求していることを実行するには、アプリケーションレイヤーで再帰を確認するか、レベルを3番目の列として格納します。

ETA:レベル数がそれほど多くない場合は、自己結合を使用して行うことができます。

例: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;
于 2010-05-13T02:08:55.323 に答える