ホームページ >データベース >mysql チュートリアル >ストアド プロシージャは MySQL の階層 BOM ツリーを効率的に移動するにはどうすればよいですか?

ストアド プロシージャは MySQL の階層 BOM ツリーを効率的に移動するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 14:39:15273ブラウズ

How Can Stored Procedures Efficiently Traverse a Hierarchical BOM Tree in MySQL?

ツリー トラバーサル用の MySQL 再帰クエリ

問題:

次のような部品表 (BOM) テーブルがあるとします。アイテムとその親 ID。目標は、アイテムの階層表現をツリー構造の形式で取得することです。一般的な単一レベルのクエリや再帰関数の使用は非効率的である可能性があります。

解決策:

MySQL の SQL 言語は再帰クエリをネイティブにサポートしていません。この制限を克服するには、カスタム ストアド プロシージャ (SP) を作成してツリー トラバーサル機能を実現できます。

提案された SP:

次の SP を使用して、ツリー トラバーサル機能を実現できます。 BOM Tree:

  1. GetParentIDByID: 指定された項目の親 ID を検索します。
  2. GetAncestry: 項目の祖先系統を取得します。指定されたlevel.
  3. GetFamilyTree: 指定されたルート項目から始まる BOM ツリー全体の階層表現を生成します。

Usage:

SP を使用するには、次の手順に従ってください手順:

  1. 提供された SQL コードを使用して MySQL データベースに SP を作成します。
  2. ルート項目 ID をパラメータとして GetFamilyTree SP を呼び出します。
  3. SP は、 tree.

例:

たとえば、次のデータを含む BOM テーブルがある場合:

+----+------+
| item | parent |
+----+------+
| 1  | 0    |
| 2  | 1    |
| 3  | 1    |
| 4  | 3    |
| 76 | 3    |
+----+------+

GetFamilyTree の呼び出し(1) は次の階層を返します。表現:

[
  {
    "item": 1,
    "children": [
      {
        "item": 2,
        "children": []
      },
      {
        "item": 3,
        "children": [
          {
            "item": 4,
            "children": []
          },
          {
            "item": 76,
            "children": []
          }
        ]
      }
    ]
  }
]

この表現はツリー内のすべての子分岐を提供し、項目の関係を効率的に取得できるようにします。

以上がストアド プロシージャは MySQL の階層 BOM ツリーを効率的に移動するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。