回答編集履歴
6
追記
    
        answer	
    CHANGED
    
    | 
         @@ -8,19 +8,35 @@ 
     | 
|
| 
       8 
8 
     | 
    
         
             
            [階層構造(入れ子集合モデル)について](https://qiita.com/reflet/items/a454b40b57de81598732)
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            <例>
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            製品
         
     | 
| 
      
 13 
     | 
    
         
            +
            |ID |名称|
         
     | 
| 
      
 14 
     | 
    
         
            +
            |:--|--:|
         
     | 
| 
      
 15 
     | 
    
         
            +
            |1  |製品A
         
     | 
| 
      
 16 
     | 
    
         
            +
            |2  |製品B
         
     | 
| 
      
 17 
     | 
    
         
            +
            |3  |製品C
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            原料
         
     | 
| 
      
 20 
     | 
    
         
            +
            |ID |名称|
         
     | 
| 
      
 21 
     | 
    
         
            +
            |:--|--:|
         
     | 
| 
      
 22 
     | 
    
         
            +
            |1  |原料n
         
     | 
| 
      
 23 
     | 
    
         
            +
            |2  |原料z
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            構成
         
     | 
| 
       11 
     | 
    
         
            -
            |ID |親ID|構成ID| 
     | 
| 
      
 26 
     | 
    
         
            +
            |ID |親ID|構成ID|製品ID|原料ID
         
     | 
| 
       12 
27 
     | 
    
         
             
            |:--|:--:|:--:|--:|
         
     | 
| 
       13 
     | 
    
         
            -
            |1  |0| | 
     | 
| 
      
 28 
     | 
    
         
            +
            |1  |0| ||1
         
     | 
| 
       14 
     | 
    
         
            -
            |2  |0| | 
     | 
| 
      
 29 
     | 
    
         
            +
            |2  |0| ||2
         
     | 
| 
       15 
     | 
    
         
            -
            |3  |0| | 
     | 
| 
      
 30 
     | 
    
         
            +
            |3  |0| |1|
         
     | 
| 
       16 
     | 
    
         
            -
            |4  |3|1| 
     | 
| 
      
 31 
     | 
    
         
            +
            |4  |3|1|||
         
     | 
| 
       17 
     | 
    
         
            -
            |5  |3|2| 
     | 
| 
      
 32 
     | 
    
         
            +
            |5  |3|2|||
         
     | 
| 
       18 
     | 
    
         
            -
            |6  |0| | 
     | 
| 
      
 33 
     | 
    
         
            +
            |6  |0| |2|
         
     | 
| 
       19 
     | 
    
         
            -
            |7  |6|3| 
     | 
| 
      
 34 
     | 
    
         
            +
            |7  |6|3|||
         
     | 
| 
       20 
     | 
    
         
            -
            |8  |6|2| 
     | 
| 
      
 35 
     | 
    
         
            +
            |8  |6|2|||
         
     | 
| 
       21 
     | 
    
         
            -
            |9  |0| | 
     | 
| 
      
 36 
     | 
    
         
            +
            |9  |0| |3|
         
     | 
| 
       22 
     | 
    
         
            -
            |10 |9|6| 
     | 
| 
      
 37 
     | 
    
         
            +
            |10 |9|6|||
         
     | 
| 
       23 
     | 
    
         
            -
            |11 |9|1| 
     | 
| 
      
 38 
     | 
    
         
            +
            |11 |9|1|||
         
     | 
| 
       24 
39 
     | 
    
         | 
| 
       25 
40 
     | 
    
         
             
            下位ノードへの問い合わせは自己結合となり、`COALESCE(A.構成ID, A.ID)=B.親ID`とすることで、製品の展開が行える事となる。
         
     | 
| 
       26 
     | 
    
         
            -
            ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。
         
     | 
| 
      
 41 
     | 
    
         
            +
            ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。
         
     | 
| 
      
 42 
     | 
    
         
            +
            ↑イメージ合わせました
         
     | 
5
追記
    
        answer	
    CHANGED
    
    | 
         @@ -22,4 +22,5 @@ 
     | 
|
| 
       22 
22 
     | 
    
         
             
            |10 |9|6|(製品B)
         
     | 
| 
       23 
23 
     | 
    
         
             
            |11 |9|1|(原料n)
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
      
 25 
     | 
    
         
            +
            下位ノードへの問い合わせは自己結合となり、`COALESCE(A.構成ID, A.ID)=B.親ID`とすることで、製品の展開が行える事となる。
         
     | 
| 
       25 
26 
     | 
    
         
             
            ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。
         
     | 
4
追記
    
        answer	
    CHANGED
    
    | 
         @@ -20,4 +20,6 @@ 
     | 
|
| 
       20 
20 
     | 
    
         
             
            |8  |6|2|(原料z)
         
     | 
| 
       21 
21 
     | 
    
         
             
            |9  |0| |製品C
         
     | 
| 
       22 
22 
     | 
    
         
             
            |10 |9|6|(製品B)
         
     | 
| 
       23 
     | 
    
         
            -
            |11 |9|1|(原料n)
         
     | 
| 
      
 23 
     | 
    
         
            +
            |11 |9|1|(原料n)
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。
         
     | 
3
修正
    
        answer	
    CHANGED
    
    | 
         @@ -8,14 +8,16 @@ 
     | 
|
| 
       8 
8 
     | 
    
         
             
            [階層構造(入れ子集合モデル)について](https://qiita.com/reflet/items/a454b40b57de81598732)
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            <例>
         
     | 
| 
       11 
     | 
    
         
            -
            |ID 
     | 
| 
      
 11 
     | 
    
         
            +
            |ID |親ID|構成ID|名称|
         
     | 
| 
       12 
12 
     | 
    
         
             
            |:--|:--:|:--:|--:|
         
     | 
| 
      
 13 
     | 
    
         
            +
            |1  |0| |原料n
         
     | 
| 
      
 14 
     | 
    
         
            +
            |2  |0| |原料z
         
     | 
| 
       13 
     | 
    
         
            -
            | 
     | 
| 
      
 15 
     | 
    
         
            +
            |3  |0| |製品A
         
     | 
| 
       14 
     | 
    
         
            -
            |2	|1|原料z|
         
     | 
| 
       15 
     | 
    
         
            -
            |3 
     | 
| 
      
 16 
     | 
    
         
            +
            |4  |3|1|(原料n)
         
     | 
| 
      
 17 
     | 
    
         
            +
            |5  |3|2|(原料z)
         
     | 
| 
       16 
     | 
    
         
            -
            | 
     | 
| 
      
 18 
     | 
    
         
            +
            |6  |0| |製品B
         
     | 
| 
       17 
     | 
    
         
            -
            | 
     | 
| 
      
 19 
     | 
    
         
            +
            |7  |6|3|(製品A)
         
     | 
| 
       18 
     | 
    
         
            -
            |6 
     | 
| 
      
 20 
     | 
    
         
            +
            |8  |6|2|(原料z)
         
     | 
| 
       19 
     | 
    
         
            -
            | 
     | 
| 
      
 21 
     | 
    
         
            +
            |9  |0| |製品C
         
     | 
| 
       20 
     | 
    
         
            -
            | 
     | 
| 
      
 22 
     | 
    
         
            +
            |10 |9|6|(製品B)
         
     | 
| 
       21 
     | 
    
         
            -
            |9 
     | 
| 
      
 23 
     | 
    
         
            +
            |11 |9|1|(原料n)
         
     | 
2
追記
    
        answer	
    CHANGED
    
    | 
         @@ -5,4 +5,17 @@ 
     | 
|
| 
       5 
5 
     | 
    
         
             
            phpで再帰を行うのはレスポンスやメモリなどの問題が生じるでしょうから、DB側での処理とした方が良いでしょう。
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            [SQLで木と階層構造のデータを扱う(1)―― 入れ子集合モデル](http://www.geocities.jp/mickindex/database/db_tree_ns.html)
         
     | 
| 
       8 
     | 
    
         
            -
            [階層構造(入れ子集合モデル)について](https://qiita.com/reflet/items/a454b40b57de81598732)
         
     | 
| 
      
 8 
     | 
    
         
            +
            [階層構造(入れ子集合モデル)について](https://qiita.com/reflet/items/a454b40b57de81598732)
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            <例>
         
     | 
| 
      
 11 
     | 
    
         
            +
            |ID	|親ID|名称|構成ID
         
     | 
| 
      
 12 
     | 
    
         
            +
            |:--|:--:|:--:|--:|
         
     | 
| 
      
 13 
     | 
    
         
            +
            |1	|0|製品A|
         
     | 
| 
      
 14 
     | 
    
         
            +
            |2	|1|原料z|
         
     | 
| 
      
 15 
     | 
    
         
            +
            |3	|1|原料n|
         
     | 
| 
      
 16 
     | 
    
         
            +
            |4	|0|製品B|
         
     | 
| 
      
 17 
     | 
    
         
            +
            |5	|4|製品A|1
         
     | 
| 
      
 18 
     | 
    
         
            +
            |6	|4|原料z|
         
     | 
| 
      
 19 
     | 
    
         
            +
            |7	|0|製品C|
         
     | 
| 
      
 20 
     | 
    
         
            +
            |8	|7|製品B|4
         
     | 
| 
      
 21 
     | 
    
         
            +
            |9	|7|原料n|
         
     | 
1
推敲
    
        answer	
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            目的としては階層構造なので、ベタ打ち 
     | 
| 
      
 1 
     | 
    
         
            +
            目的としては階層構造なので、ベタ打ちしたくないのであれば、**経路列挙モデル**ではなく**入れ子集合モデル**ということになります。
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            MySQLが8.0なら再帰クエリーが使えますが、そうでないならSQLには手間や制約(階層の深さ)がか 
     | 
| 
      
 3 
     | 
    
         
            +
            MySQLが8.0なら再帰クエリーが使えますが、そうでないならSQLには手間や制約(階層の深さ)が掛かりますが実現できないわけではありません。
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            phpで再帰を行うのはレスポンスやメモリなどの問題が生じるでしょうから、DB側での処理とした方が良いでしょう。
         
     | 
| 
       6 
6 
     | 
    
         |