回答編集履歴
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
|
|