0

SQL Server データベースを使用して、並べ替え可能な複数レベルのリストを作成するための適切なテーブル構造を開発する必要があります。

以下は、ソート可能なマルチレベル リストを作成する方法の例です。

A
├──B
|  ├──E
|  ├──F
|  ├──O
|
├──C
|  ├──M
|

私のテーブル構造:

ID   Title   Parent   Sort
---------------------------
1    A       Null     0
2    B       A        0
3    E       B        0
4    F       B        1
5    O       B        2
6    C       A        1
7    M       C        0

では、そのようなリストを作成する最善の方法を教えていただけませんか? どうもありがとうございます。

4

2 に答える 2

1

輪郭を描いた構造に合わせてください。SQL Server は CTE を介した再帰クエリをサポートしています。次のような方法でうまくいきます。

WITH tree AS (
  SELECT id, name, parent,
         0 AS level,
         CAST(sort AS varchar(90)) AS path,
         CAST(name AS varchar(90)) AS fullname
    FROM test WHERE parent IS NULL
  UNION ALL
  SELECT t.id, t.name, t.parent, tree.level + 1,
         CAST(tree.path + '.' + CAST(t.sort AS varchar) AS varchar(90)),
         CAST(tree.fullname + '.' + t.name AS varchar(90))
    FROM test t
    JOIN tree ON t.parent = tree.name
)
SELECT id, name, parent, level, path, fullname FROM tree
ORDER BY path;

ここに追加の情報フィールドをいくつか作成しています。

  • level、ルートからノードの深さを示します。
  • path、フィールドに基づいて構築されsort、ツリーを適切にソートするために使用されます。
  • fullname—完全なノード名の見栄えがします。

このクエリはこちらで試すことができます。

データのサイズを考慮してください。巨大なデータ構造の場合は、パフォーマンスを向上させるために述語を内部クエリにプッシュすることをお勧めします。

于 2012-05-12T19:11:13.540 に答える
0

必要なすべての詳細を含む 1 つのテーブルを設計し、ID と ParentID を追加し、ID に ParentID を右外部結合します。終わり。

于 2012-05-12T18:49:00.450 に答える