sql >> データベース >  >> RDS >> Mysql

MySQLで親子モデルの深さを計算する

    これは、データベース内の階層の実際の実装によって異なります。入れ子集合モデルを使用している場合( http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql / )単一の選択で完全な親から子へのパスを取得できます。

    更新 :わかりました。隣接リストモデルを使用しているので、ノードレベルをテーブルに保存することをお勧めします。 1つのクエリでノードの深さを取得できるだけでなく、1つのクエリでそのノードへのパス全体を取得することもできます(クエリは動的に生成する必要があります):

    SELECT n1.name AS lvl1, n2.name as lvl2, n3.name as lvl3, ..., nN.name as lvlN
      FROM nodes AS n1
      JOIN nodes AS n2 ON n2.parent_id = n1.id
      JOIN nodes AS n3 ON n3.parent_id = n2.id
      ...
      JOIN nodes AS nN ON nN.parent_id = n(N-1).id
    WHERE nN.id = myChildNode;
    

    ノードがレベルNにあることがわかっているので、左結合は必要ありません。id/ parent_idに適切なインデックスがあれば、これはかなり高速です。
    このアプローチの欠点は、ノードレベルを維持する必要があることです。ノードの移動中に更新されますが、ネストされたセットの場合のようにテーブルの大部分に対してではなく、ノード自体とその子に対してのみ実行するため、これはかなり単純で高速である必要があります。



    1. AngularJS&Laravel 4.2は、multipテーブルからデータを取得して結合します

    2. ID列を使用してテーブルを作成する方法

    3. MySQLはInnoSetupスクリプトにデータベースをインストールしてロードします

    4. mysqlパスワードが私のダンプを台無しにしています