1

データベース内の階層データからツリービューを作成するアプリケーションを開発しました。

ノードが展開されたときにのみ子ノードを取得するように、遅延読み込みを使用するように設計しました。

私の問題は、データベースを呼び出して見ない限り、明らかにノードに子があるかどうかわからないことです。現在、[+] アイコンがすべてのノードに表示されるように、ダミーの子ノードを実装しています。次に、このダミー ノードを削除し、イベントで実際の子ノードを取得しますBeforeExpand

これは、子ノードを持たないノードの [+] アイコンを取得することを意味するため、ユーザーが展開アイコンをクリックしても、見掛け倒しに見えるものは何も表示されません。

遅延読み込みツリービューで子ノードを処理するための推奨される方法は何ですか? 子ノードがあるかどうかを確認するためにデータベースを呼び出す場合は、子ノードをロードして、遅延ロードを忘れてください。

私が考えていたのは、'HasChildren' フラグをデータベースに保存することでした。これにより、実際に子ノードを持つノードに対してのみ、ダミーの子ノードを選択的に作成できます

とりとめもなく申し訳ありませんが、私は他の人がどう思うかを見ることに非常に興味があります...

4

3 に答える 3

5

呼び出しを行うときは、ノード データとともに子を確認します。

SELECT  tp.*, 
        (
        SELECT  1
        FROM    table tc
        WHERE   tc.parent = tp.id
        LIMIT 1
        ) AS has_children
FROM    table tp

数える必要はありません。長いかもしれません。

少なくとも 1 つの子が存在することを確認してください。

于 2009-05-29T16:18:17.203 に答える
1

この問題に対する私が推奨する解決策は、階層データのセットに事前に順序付けされたツリー トラバーサルを実装することです。実装例については、http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/を参照してください。

ポイントは、各ノードの左と右の値を維持する場合、左の値と右の値が 1 以上異なる場合、そのノードには子があるということです。

このアプローチの唯一の顕著な欠点は、ノードの構造を変更するときに、左右の値を積極的に維持する必要があることです。

于 2009-05-29T16:26:15.783 に答える
1

最初のクエリを変更して、すべて同じデータだけでなく、子の数も返すようにします。子の数がゼロでない場合は [+] を表示します。スキーマとクエリを投稿して、カウントを取得するのに役立ちます

于 2009-05-29T16:06:02.067 に答える