効率的な MySQL ストレージと PHP 取得のための最適なツリー構造
データ構造の領域で、階層データを格納するための最適なツリー構造を選択する重要です。さまざまな深さを持つ約 300 個のノードと無制限の子ノードを含むツリーの場合、重要な優先事項は完全なツリーまたはサブツリーを迅速に取得することです。さらに、ノードを追加または移動する機能が必要になる場合もあります。
ネスト セット モデル (NSM) は、効率的なクエリ機能により、このシナリオに最適なアプローチとして浮上します。 「MySQL での階層データの管理」で提供されているドキュメントによると、NSM は効果的なソリューションを提供します。
NSM の実装
NSM を実装するには、ツリー内の各ノードに次のものが必要です。追加の 2 つの列: lft (左側の境界を表す) と rgt (右側の境界を表す)。これらの列は、階層内のノードの位置を定義します。
たとえば、リンクされた MySQL ドキュメントで提供されている例を考えてみましょう。
+-------------+----------------------+-----+-----+ | category_id | name | lft | rgt | +-------------+----------------------+-----+-----+ | 1 | ELECTRONICS | 1 | 20 | | 2 | TELEVISIONS | 2 | 9 | | 3 | TUBE | 3 | 4 | | 4 | LCD | 5 | 6 | | 5 | PLASMA | 7 | 8 | | 6 | PORTABLE ELECTRONICS | 10 | 19 | | 7 | MP3 PLAYERS | 11 | 14 | | 8 | FLASH | 12 | 13 | | 9 | CD PLAYERS | 15 | 16 | | 10 | 2 WAY RADIOS | 17 | 18 | +-------------+----------------------+-----+-----+
NSM では、lft フィールドと rgt フィールドは以下に対応します。 XML ドキュメント内の開始タグと終了タグの行番号は次のとおりです。
1. <electronics> 2. <televisions> 3. <tube> 4. </tube> 5. <lcd> 6. </lcd> 7. <plasma> 8. </plasma> 9. </televisions> 10. <portable electronics> 11. <mp3 players> 12. <flash> 13. </flash> 14. </mp3 players> 15. <cd players> 16. </cd players> 17. <2 way radios> 18. </2 way radios> 19. </portable electronics> 20. </electronics>
この視覚化により、ネストされた階層を理解し、複数のクエリや結合を必要とせずにノード全体を効率的に選択できるようになります。
以上が約 300 ノードの階層データを効率的に MySQL ストレージと PHP で取得するための最適なツリー構造は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。