問題タブ [mptt]

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 投票する
4 に答える
7390 参照

sql - SQLを使用してデータベース内の破損したMPTTツリー(ネストされたセット)を修復するにはどうすればよいですか?

lftrghtおよびparent_id列を使用してMySQLに保存された100,000を超えるレコードのMPTTツリーがあります。これで、親IDはそのままで、左/右の値が破損しました。アプリケーション層で修復するには、大量のクエリが必要になります。データベースに負担をかけ、SQLのみを使用して左右の値を再計算させる良い方法はありますか?


明確にするために、隣接するレコードのIDではなく、ネストされたセットの数値のlft/rght値を再計算する必要があります。

ネストされたセット
(ソース:mysql.com

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

django - django-mpttを使用してFeinCMSページツリーのコピーを作成すると、子の順序が変更されます

django-mpttを使用して管理されているFeinCMSページツリーのコピーを作成しようとしています。私はこの関数を書きました:

を使用してそれを呼び出します

一般的には機能しますが、次のようなページツリーがある場合:

それは次のように出てきます:

mpttコードをステップスルーすると、魔法はmptt / managers.py / _inter_tree_move_and_close_gap()で発生しているように見えます。ここで、何らかの理由で孫の「lft」値が変更されます。移動前はC=3、D = 5、その後はC = 5、D=3です。

これは、DがCの前にソートされる理由を説明していますが、これらの値が切り替わる理由がわかりません。何かご意見は?

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

php - PHPはMySqlデータベースを変更せずにMPTTを表示する必要があります

表示する必要のあるMPTTで編成されたMySqlデータベースがあり、レベル制限はなく、データベースを変更できません。http://mikehillyer.com/articles/managing-hierarchical-data-in-mysqlを試しました。 /、しかしそれでも私にいくつかの頭痛の種がありました。

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

python - django-mptt がデータを正しくリンクしていない

ヘイ、私はMPTTを使用して、会話を含むモデルからツリーのようなデータを作成しています。それらを「投票」フィールドで並べ替えたいと思っています。

モデルは現時点ではこのように見えますが、非常に基本的です。

ご覧のとおり、メッセージ フィールド、スレッド モデルにリンクされた親 FK、および投票があります。

私の見解の中で私はこれを持っています

次に、私のテンプレート内

ただし、出力されるリストはすべてのスレッドのリストです。それらのどれも一緒にリンクされていません。

何か案は?

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

php - パスでMPTTスタイルテーブルをクエリする最も効率的な方法は何ですか?

MPTTメソッドを使用して階層データを格納するMySQLテーブルがあります。このテーブルには、各行の短い文字列識別子(スラッグ)を格納する列もあります。

これらのスラッグで構成されるパスが与えられたときに、テーブルをクエリして正しい行を見つけられるようにしたいと思います。foo/barつまり、可能な限り最も効率的な方法でそれが表す行を見つけたいパスを指定します。

これを単一のSQLクエリで実行できますか?そうでない場合、正しい結果を得るためにいくつかのクエリをつなぎ合わせる最も効率的な方法は何でしょうか?私は自分のアプリでPHPを使用しています。これは、SQLクエリだけで実行できない場合に関連する可能性があります。

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

mysql - (MySQL) MPTT / Nested Set Model の集約関数

そこで、MySQL を使用し、ネストされたセット/修正済みプレオーダー ツリー トラバーサル モデルに基づくカテゴリ構造を、次category_idのフィールドを持つ「nested_category」というテーブル名に格納しています 。namelftrgtpublished

published1 または 0 のいずれかです... 1 の場合、カテゴリはライブ サイトに表示されます。0 の場合、ライブ サイトに表示されません。さらに重要なことに、その未公開カテゴリの子もライブ サイトに表示されません。

published=1を持つすべてのカテゴリをリストし、 を持つカテゴリの子孫であるすべてのカテゴリを無視するクエリを書くのに問題がありますpublished=0

現時点で私は使用しています:

親が「非公開」のときに「子」カテゴリを無視する方法が本当にわかりません。

product_idまた、これをフィールドnameを持つ「new_products」テーブルにリンクしようとしています。私はここまで来ました:stockpricecategory_idpublished=1

上記のクエリは最初のクエリを使用しているため、「未公開」のカテゴリや製品は返されませんが、「公開済み」カテゴリが「未公開」カテゴリの子孫である場合は考慮されません。これが理にかなっていることを願っています!

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

python - ノードのリストについてはdjango-mpttget_descendants

descendants(include_self=True)1つのノードではなく、ノードのリスト(QuerySet)のすべてを取得しようとしています。これは1つのSQLクエリである必要があります。

例(実際には機能していません:)

私が今持っている唯一のアイデアは、some_nodesを反復処理し、すべてのノードに対してget_descendants()を実行することですが、これはひどい解決策です(SQLクエリがたくさんあります)。

Django ORMを介してそれを行うクリーンな方法がない場合、代わりに実行するカスタムSQLを提供できますか?ここで、私がノードのpkのリストを持っていると仮定できます。

編集:それが役立つ場合-私の「some_nodes」はすべて同じ親ディレクトリに配置され、ツリー内で同じ「レベル」を持ちます。

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

python - mptt クエリセットの祖先のクエリセットを取得する効率的な関数

mptt クエリセットのすべての先祖を取得するための効率的なアルゴリズムを持っている人はいますか? これまでのところ、私が考えることができる最高のものは次のようなものです:

このアプローチには 2 つの問題があります。

  1. 隣り合っていないブランチがあると失敗します (つまり、実際には機能しません)。
  2. 最終的なクエリに句が含まれてしまうため、非常に非効率的でnumber_of_trees*number_of_levelsあり、非常に高速に巨大化する可能性があります

祖先を別の場所にキャッシュすることにオープンですが、効率的に行う方法が思いつきません。先祖のIDのコンマ区切りリストを含むフィールドを追加してから、GROUP_CONCAT(私はMySQLにいます)エクストラ内で実行することを検討しましたが、それは巨大/遅くなる可能性があると思います.

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

php - MySQL、PHP、MPTT: 子を weight/cost/menu_order で並べ替える

「page_menu_order」行で結果を並べたいが、同じ深さ内にある。

そのため、子は階層構造のままですが、その深さの範囲内では、コスト/価格/または page_menu_order で並べ替えられます。

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

php - CakePHP のツリー動作を使用して製品のカテゴリのみを表示する方法は?

私は CakePHP のツリー動作を使用しており、空のカテゴリを表示したくないため、カテゴリまたはサブカテゴリに製品があるかどうかを知る必要があります。

私はこのようなことをしたいと思います:

これは、不要な配列次元の設定を解除するための出発点になります。データベースでは、カテゴリには多くの製品があります。

この問題の最善の解決策は何ですか? category_id を使用して foreach ループで Product->find を回避することは可能ですか?