問題タブ [nested-sets]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - ネストされたセット階層内の複数のテーブル
ツリー階層に配置したい、さまざまな MySQL テーブルに多数の個別のアイテムが格納されています。隣接リスト モデルを使用して、parent_id フィールドを各テーブルに追加し、外部キー関係を使用してテーブルをリンクできます。
ただし、ネストされたセット/変更されたプレオーダー ツリー トラバーサル モデルを使用したいと思います。データは、読み取りに大きく偏った環境で使用され、実行すると予想される種類のクエリでは、このアプローチが好まれます。
問題は、ネストされたセットに関するすべての情報が、単一のテーブルに格納された 1 つのタイプのアイテムしかないと仮定していることです。私が考えることができるこれを回避する方法は次のとおりです。
- テーブル/項目タイプごとに 1 つずつ、ツリーに複数の外部キー フィールドがあります。
- ツリー構造のアイテム テーブルの名前とアイテム ID を格納します。
どちらのアプローチも控えめに言っても洗練されていないので、これを行うためのより良い方法はありますか?
sql - 重複するレコード ID を持つ SQL Server ツリー階層とネストされたセット
私がこの結果セット構造を持っていることを考えると(余分なフィールドは取り除かれています)
Parent
レコードをツリー順に返すことは可能ですChildren
か? 例えば、Child
Parent
Children
Sibling
これを行うことを考えることができる唯一の方法は、この記事に従うことです-
ネストされたセットを使用して階層のパフォーマンスを向上させる
[LeftExtent]
および[RightExtent]
各レコードに対してフィールドを含めます。この記事の SQLIds
は一意の場合は正常に機能しますが、この特定のツリー構造では、同じレコードがId
ツリー内の異なる場所に表示される可能性があります (ParentId
フィールドは明らかに異なります)。問題は記事のこのSQLにあると思います-
重複Ids
したレコードに [LeftExtent] と [RightExtent] の値を指定できるようにするには、どうすればこれを変更できますか? または、必要な順序で結果セットを返す簡単な方法が完全にありませんか?
python - ネストされたセット モデルと SQLAlchemy -- 新しいノードの追加
Nested Set Modelを使用して実装されたツリーに SQLAlchemy で新しいノードを追加するにはどうすればよいですか?
新しいノードを割り当てlft
、rgt
影響を受ける他のすべてのノードを更新するには、テーブルにトリガーが必要ですが、ノードの位置を定義する最良の方法は何ですか? 新しいノードの をコンストラクターに渡すことはできますが、それをトリガーにparent_id
伝えるにはどうすればよいでしょうか?parent_id
mysql - ネストされたセットの検索
カテゴリの階層を含めるために、ネストされたセットのように機能する MySQL テーブルがあります。テーブル スキーマは次のようになります。
lft
rgt
ノードの左右の境界を定義し (ネストされたセットが機能する方法は、各ノードの ID がその親の境界内に収まるようにすることです)、親ノードを指定parent_id
します。一意のインデックスにより、同じ親を持たない限り、同じ名前の複数のカテゴリが存在できます。
階層に基づいて、セット内の特定のノードを見つける適切な方法を見つけようとしています。たとえば、foo/bar/baz を探す場合、親が bar という名前で、親が foo という名前の baz という名前のノードを取得したいと考えています。明らかに、名前だけで検索することはできません。同じ名前のカテゴリが複数存在する可能性があるからです。
これを行う方法は、最上位のカテゴリを見つけてから、親 ID が以前に見つかったカテゴリのものである指定された名前を持つ後続の各カテゴリを見つけることですが、これはあまり効率的ではないようです。ネストされたセットを検索するより良い方法はありますか?
php - 変更されたプレオーダーツリートラバーサルモデル(入れ子集合)を
自分のサイトに表示するために、ツリートラバーサルモデルで階層的に設定されたデータを<ul>に取得しようとしています。
これが私のコードです:
これが私のサンプルテーブルです:
これで、次のように出力されます。
階層構造でリストを出力する理由や方法を教えてもらえますか?
sql - ネストされたセットのすべてのレコードを実際の html ツリーにレンダリングする方法
awesome_nested_set
Rails プロジェクトでプラグインを使用しています。次のような 2 つのモデルがあります (簡略化)。
データベース内のツリーは期待どおりに構築されます。parent_id
、lft
およびのすべての値rgt
は正しいです。ツリーには複数のルート ノードがあります (これはもちろん で許可されていawesome_nested_set
ます)。
<ul>
ここで、特定の顧客のすべてのカテゴリを、構造のような正しくソートされたツリー (ネストされたタグなど) にレンダリングしたいと考えています。これはそれほど難しくありませんが、効率的である必要があります (SQL クエリが少ないほど良い)。
更新: SQL クエリをさらに実行しなくても、ツリー内の任意のノードの子の数を計算できることがわかりました: number_of_children = (node.rgt - node.lft - 1)/2
. これで問題が解決するわけではありませんが、役に立つかもしれません。
ruby-on-rails - awesome_nested_set
選択入力があります:
f.select :category_id, nested_set_options(Category, @categories) {|i| "#{'-' * i.level} #{i.name}" }
level > 1 のカテゴリのみを表示する最も効率的な方法は何ですか?
mysql - トリガー: ネストされたセットへの隣接リスト
レガシー システムに隣接リストがあり、再帰的にクエリを実行したい (小計を取得する必要があるなど)。
特定のセットの「ネストされたセットの同等物」を別のテーブルに格納するか、同じテーブルの別の列に格納するトリガーを MySQL で作成できますか?
私のセットは次のようなものです:
これ欲しい:
database - カテゴリが複数の親を持つことを許可することは理にかなっていますか? 代替手段はありますか?
短い質問:複数のカテゴリの下に表示される製品カテゴリはどのように管理する必要がありますか? そうするのは悪い習慣ですか?
背景情報: 次 のようなカテゴリの製品データベースがあります。
接着剤とペーパー クリップは両方のカテゴリに割り当てられていることに注意してください。このカテゴリ ツリーでは 2 つの異なる場所に表示されますが、データベースでは同じカテゴリ ID を持っています。なんで?2 つの理由:
- カテゴリには属性が割り当てられます。たとえば、ペーパー クリップには、重量、素材、色などがあります。
- 接着剤カテゴリに割り当てられた製品は、美術工芸品および事務用品の下に表示されます。これは当然のことです。これらはデータベース内の実際のカテゴリ ID と同じです。
これにより、単一のカテゴリとその属性および割り当てられた製品を管理できますが、カテゴリ ツリー内の複数の場所に配置できます。
ネストされたセット モデルを使用しているため、これをサポートするために使用するデータベース構造は次のとおりです。
したがって、カテゴリ ツリー内に特定のカテゴリの複数のインスタンスが存在する可能性があるため、Category と CategoryTree の間には 1:M があります。
これをモデル化して、製品カテゴリを複数のカテゴリの下に表示できるようにする簡単な方法はありますか?
mysql - MPTT 結果セットのアイテムを並べ替えていますか?
MPTT (変更されたプレオーダー ツリー トラバーサル) モデルを使用して、MySQL テーブルに階層データを格納しています。(MPTT モデル: 別の説明は入れ子集合モデルです。)。私の質問は次のとおりです。ツリーでクエリの結果をソートする賢い方法を見つけた人はいますか? 「ORDER BY label」に進むこともできますが、結果セットは、ノードの場所やツリー内の深さに関係なく、ラベルでソートされます。
以下は、任意のノードのツリーを各ノードの深さで取得するために使用するクエリの例です。
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/に従って。
もちろん、これは常に、ネストされたセット内の位置によってアイテムを並べ替えます。'lastName' や 'accountBalance' や 'town' などで注文したい場合はどうすればよいでしょうか? それは MySQL で実行できますか? それとも、スクリプト言語で結果をソートする必要があると思いますか?