問題タブ [nested-set-model]

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.

0 投票する
0 に答える
392 参照

symfony-1.4 - クエリ時に Doctrine Nested Set Tree を注文する方法

ネストされたセットとして機能するテーブルがあります。問題は、テーブルにフィールド 'short_name' と 'long_name' があり、さまざまな場所で結果を順序付けする必要があることです。

ツリーをクエリするとき、Doctrine の "HYDRATE_RECORD_HIERARCHY" ハイドレーション モードを使用しています。問題は、私が知る限り、このハイドレーション モードは、クエリに orderBy 句「ORDER BY lft ASC」を含める必要があるという点で制限されています。

並べ替えられた結果セットを取得する方法はありますか、またはクエリが返された後に何らかの種類の並べ替えを適用する必要がありますか?

Doctrine Collection を取得しているので (配列表現から離れたいと思います)、後でそれをソートするのはそれほど簡単ではありません。

0 投票する
0 に答える
60 参照

php - テーブルから行を削除すると、別の行が削除されます

カテゴリ テーブルと製品テーブルの 2 つのテーブルがあります。

外部キーとの直接的な関係がないため、SQL に依存関係はありません。Products テーブルには、ビューでカテゴリ テーブルと結合するためだけに、category_id というフィールドが含まれています。

ここで問題:

この手順をphpで実行すると:

カテゴリとそのすべてのリーフは正しく削除されますが、「category_id」フィールドに削除されたカテゴリ ID の 1 つを含む製品行も削除されます。

それはSQLの問題ですか、それとも私が考慮しなかったものですか?

0 投票する
0 に答える
185 参照

php - Doctrine "Tree" 拡張機能を使用してカテゴリ スラッグで製品を取得する

私は現在、製品のプロパティを介して多対 1 の関係を持つエンティティを持っProductています。カテゴリには、注釈を使用して定義されたスラッグがあり、完全に機能しています。Categorycategory@Gedmo\Slug

残念ながら、Github の Tree 拡張機能のドキュメントは、スラッグ、特にスラッグによる選択に関してはかなり簡潔です。かなりの数の Google の結果を試しましたが、まだ解決策を見つけることができませんでした。

私が知りたいのは、特定のカテゴリ スラッグ内またはそのスラッグの子カテゴリ内にあるすべての製品を取得する方法です。

誰でも助けてもらえますか?

0 投票する
1 に答える
139 参照

sql - 時間の経過とともに変化するネストされたデータ セットのモデル化に関する提案

一時的なネストされたデータ セット モデルの作成に関する提案を探しています。セクションを読むためのパフォーマンスを改善しようとしています。100 万ノード以下のノード ツリーがあり、頻繁に 20 ノード以上の深さがあります。ツリーには、将来の変更を入力する機能を備えた、時間の経過とともに変化する可能性のあるカテゴリが格納されます。

現在のデータ構造は一時的な隣接ノード モデルであり、時間の経過に伴うノード ツリーの変更のモデル化は単純なデータ構造では簡単です。

ノード
nodeID
[データ]

エッジ
parentNodeId
childNodeId
validFromDate
validToDate

ネストされたデータセットは非常に高速な読み取り操作を可能にしますが、ネストされたセットに関する私の現在の理解では、ツリーへの時間の経過に伴う変更はサポートされていません

ノード
nodeId
left
right
[データ]

私が考えていたことの 1 つは、特定の時点での左/右の値を反映する一連の「ネスト マップ」を作成することでしたが、これは、時間の経過に伴う単一の変化がモデル化されるたびにノード ツリー全体を再作成することを意味します。変更が頻繁に行われるため、「Nests」データセットのサイズが大きすぎます。

ネスト
nodeId
left
right
validFromDate
validToDate

一時的なネストされたデータセット モデルを作成した人はいますか、またはこの件に関する優れたリソースを知っていますか?

0 投票する
2 に答える
944 参照

mysql - カテゴリのすべての親を CONCAT

サンプル データベース (ネストされたセット モデルのカテゴリ):

次のように、下位の子カテゴリ (おそらく連結?) のすべての親を取得したい:

BETWEEN lft AND rgt と CONCAT で遊んでいる以外に、私はかなり行き詰まっており、必要な結果を得るためのヒントと情報を使用できます。ありがとう!

SQL フィドル

0 投票する
1 に答える
2169 参照

php - ネストされたセットは、左右のノードを決定する方法を設定します

これは、mysql のネストされたセット モデルです。

とが左右の値を示すフィールドである_lftとしましょう_rgt

私が見るように、値が低いほど左は子供ですか? ここでは、左側から2つの子、右側から2つの子を取得しましたが、direction挿入する前に子の方向を示すような新しいフィールドを追加せずにこれを行うことができますか?

_lftこれをandのみを使用して決定したいのです_rgtが、ロジックが何であるかを理解できません。言葉でも、コードは必要ありません

親に対して左側に属する子のみをクエリするにはどうすればよいですか?

提案をお願いします、ありがとう。

0 投票する
3 に答える
368 参照

mysql - "in" スローを使用した結合およびサブ クエリを使用した SQL ネストされたセット クエリ

ネストされたセット構造のクエリが遅い (~4 秒) のに問題があります。

Explain は以下を返します。

in()サブクエリがクエリを遅くしていると思います。これを行うより良い方法はありますか?

ありがとう。

編集:

leftサブクエリのfrom 結合を削除するのを忘れました。

0 投票する
1 に答える
1475 参照

php - Laravel リレーションシップを使用した MySQL のネストされたセット モデル

こんばんは!

私は、Laravel が MySQL Nested Set Model (lft および rgt キー) に基づくリレーションシップを持つことを可能にするパッケージに取り組んでいます。

凡例: X、Y、Z、A、B、C は整数です。

これを eshop カテゴリで使用すると仮定しましょう。

私の最初のタスクは、親子関係を作成することです。現在のカテゴリの親を見つけるリレーションを作成できました。私のクエリは次のようになります。

これは完全に正しく機能します。しかし、たとえば 100 個のカテゴリを読み込もうとすると問題が発生します。次に、100 のカテゴリに対する 1 つの SQL クエリです。

各カテゴリの親に対する 1 つの SQL クエリ:

つまり、合計で101の SQL クエリです。

ここが問題の部分です。Eager Loading (すべての関係クエリを 1 つのクエリにマージする) と呼ばれる手法を使用したいと考えています。しかし、それを行う方法は?

ソリューション番号 1

私の最初の解決策は、次からすべての lft および rgt キーを収集することでした。

次のようなクエリを作成します。

しかし、この解決策はまったく機能しません。カテゴリのすべての親を返します。

ソリューション番号 2

そこで、この方法でちゃんと動くようにしてみました。元のクエリは同じように見えます。

しかし、親のロードはまったく異なります。

このクエリは関連する結果のみを返しますが、これは完璧ですが、親をその子に追加するには、元のクエリのすべての結果を foreach サイクルで (PHP 側で) 実行する必要があります (カテゴリ制限 100 から * を選択)。その foreach 内で、(元のクエリから) すべての親を反復する別の foreach を実行する必要があり、2 番目の foreach 内には、10 000 (100 * 100) サイクルと比較 = looooooooong 実行を行う比較ロジックがあります。

ソリューション番号 3

そこで、別の解決策を考えました。これが私の意見では最善です。これは、2 番目のソリューションの単なる改善です。

元のクエリ:

関係クエリ:

これで、PHP 側には、元のクエリの結果 (100 項目) を含む 1 つの配列と、リレーション クエリの結果 (100 項目) を含む配列があります。改善されたのは、すべての親の結果に、それを要求したカテゴリの lft および rgt キー (child_lft および child_rgt) が含まれるようになったことです。現在、PHP スクリプトははるかに高速です。最初に、すべての親を含む新しい配列 ($parents と名付けましょう) を作成します。すべての項目キー ($parents の値のキー) は、それを要求したカテゴリを識別するコード (child_lft.child_rgt => 1.5) です。これは 100 回反復する foreach です。2 番目の foreach は、元のクエリの結果を繰り返し処理し、$parents 配列にその lft および rgt キーに適合するキーを持つ値が含まれているかどうかを確認します。したがって、さらに 100 回繰り返します。合計 200 回の反復 = 完璧です。しかし、「関係クエリ」

それで、それを行う別の方法はありますか?または、ソリューションで私のSQLクエリを作成する方法はありますか? 3速?

ただ読んでくれてありがとう。ありがとう!

0 投票する
1 に答える
2564 参照

php - ネストされたセット モデル構造から Fancytree の JSON を作成する

jquery プラグイン Fancytree を使用してデータ構造を表示したいと考えています。Google で長い間検索した結果、データベースにデータ構造を格納する最良の方法は、ネストされたセット モデル (Stackoverflow here php / Mysql best tree structureで説明) であると思われます。しかし、このような構造の入れ子になったJSONを関連させて表示するのはなかなか難しく、作れませんでした..

これは、次の MySQL テーブルを変換することで構成されます。

| | カテゴリ ID | 名前 | リフト | 右クリック | 深さ |

| | 1 | エレクトロニクス | 1 | 20 | 0 |

| | 2 | テレビ | テレビ | 2 | 9 | 1 |

| | 3 | チューブ | 3 | 4 | 2 |

| | 4 | 液晶 | 5 | 6 | 2 |

| | 5 | プラズマ | 7 | 8 | 2 |

| | 6 | 携帯電子機器 | 10 | 19 | 1 |

| | 7 | MP3 プレーヤー | 11 | 14 | 2 |

| | 8 | フラッシュ | 12 | 13 | 3 |

| | 9 | CD プレーヤー | 15 | 16 | 2 |

| | 10 | 双方向ラジオ | 17 | 18 | 2 |

この JSON に:

MySQL データを階層的なネストされた JSON に変換する簡単な方法が存在するかどうかを知りたいですか? ありがとう!