35044


テーブル情報  
\- id  
自動採番値  
\- parent_id  
親idを指定  
\- root_id  
ツリーのルートのidを指定/ルートレコードである場合はNULL  
\- lft  
\- rgt

上記テーブルをselectする際に、子要素がルートから何階層(int)離れているかをSQLで求めたいのですが、方法が分かりません。  
ご教授をお願い致します。

また、

[code]

    order by root_id, lft
    
[/code]

でツリー構造順に並び替えることが出来るようです。  
イメージ：  
ルート  
子要素  
子子要素  
子子要素  
子要素


CC BY-SA 3.0
2017-05-26T08:46:41.493
35038
2017-05-29T00:06:51.120
2017-05-29T00:06:51.120
7626
7626
question
mysql sql
MySQL：lft・rgtのツリー構造のテーブルで、子要素がルートから何階層離れているかをselect時に求めたい


MySQL 8.0 からは CTE が使えます  
<https://yakst.com/ja/posts/4322>

[code]

    WITH RECURSIVE r AS
    (
      SELECT
        id,
        0 AS depth
      FROM
        some_table
    
      UNION ALL
    
      SELECT
        T2.id,
        T1.depth + 1
      FROM
        r T1
      CROSS JOIN
        some_table T2
      WHERE
        T1.id = T2.parent_id
    )
    SELECT id, max(depth) FROM r GROUP BY id ORDER BY id;
    
[/code]

のようにすることで、親エントリの数を数えることができます

CTE を使えないのであれば、SQLで全件取得し、他プログラムで親を数える以外に方法がないと思います


CC BY-SA 3.0
2017-05-26T13:17:23.743
35044
2017-05-26T13:17:23.743
9796
35038
answer