teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

追記

2018/12/12 08:04

投稿

sazi
sazi

スコア25430

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| |原料n
28
+ |1 |0| ||1
14
- |2 |0| |原料z
29
+ |2 |0| ||2
15
- |3 |0| |製品A
30
+ |3 |0| |1|
16
- |4 |3|1|(原料n)
31
+ |4 |3|1|||
17
- |5 |3|2|(原料z)
32
+ |5 |3|2|||
18
- |6 |0| |製品B
33
+ |6 |0| |2|
19
- |7 |6|3|(製品A)
34
+ |7 |6|3|||
20
- |8 |6|2|(原料z)
35
+ |8 |6|2|||
21
- |9 |0| |製品C
36
+ |9 |0| |3|
22
- |10 |9|6|(製品B)
37
+ |10 |9|6|||
23
- |11 |9|1|(原料n)
38
+ |11 |9|1|||
24
39
 
25
40
  下位ノードへの問い合わせは自己結合となり、`COALESCE(A.構成ID, A.ID)=B.親ID`とすることで、製品の展開が行える事となる。
26
- ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。
41
+ ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。
42
+ ↑イメージ合わせました

5

追記

2018/12/12 08:04

投稿

sazi
sazi

スコア25430

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

追記

2018/12/12 04:47

投稿

sazi
sazi

スコア25430

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

修正

2018/12/12 03:07

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -8,14 +8,16 @@
8
8
  [階層構造(入れ子集合モデル)について](https://qiita.com/reflet/items/a454b40b57de81598732)
9
9
 
10
10
  <例>
11
- |ID |親ID|名称|構成ID
11
+ |ID |親ID|構成ID|名称|
12
12
  |:--|:--:|:--:|--:|
13
+ |1 |0| |原料n
14
+ |2 |0| |原料z
13
- |1 |0|製品A|
15
+ |3 |0| |製品A
14
- |2 |1|原料z|
15
- |3 |1|原料n|
16
+ |4 |3|1|(原料n)
17
+ |5 |3|2|(原料z)
16
- |4 |0|製品B|
18
+ |6 |0| |製品B
17
- |5 |4|製品A|1
19
+ |7 |6|3|(製品A)
18
- |6 |4|原料z|
20
+ |8 |6|2|(原料z)
19
- |7 |0|製品C|
21
+ |9 |0| |製品C
20
- |8 |7|製品B|4
22
+ |10 |9|6|(製品B)
21
- |9 |7|原料n|
23
+ |11 |9|1|(原料n)

2

追記

2018/12/12 02:46

投稿

sazi
sazi

スコア25430

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

推敲

2018/12/12 02:22

投稿

sazi
sazi

スコア25430

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