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

回答編集履歴

5

余計な記述を削除

2016/02/28 14:23

投稿

kozuchi
kozuchi

スコア1193

answer CHANGED
@@ -5,9 +5,6 @@
5
5
  以下のようなデータを例に説明します。
6
6
 
7
7
  ## 入力
8
- 前提条件
9
- 以下の二つのファイルがある
10
-
11
8
  ```file1.csv```
12
9
  ```
13
10
  ID,氏名,年齢

4

内容を全面的に更新

2016/02/28 14:23

投稿

kozuchi
kozuchi

スコア1193

answer CHANGED
@@ -1,34 +1,107 @@
1
- とりあえず、まず、テーブル設計をするのが先決と思います。
1
+ 「情報追加・修正の依頼をする」に答えてくさったおかげで、
2
+ ご質問の詳細がわかりましたので、それに合わせて回答も書き換えさせていただきます。
2
3
 
3
- どういうテーブルがあって、テーブル間の関係がどうなっているか
4
+ # 例
4
- (二つCSVファイルが、それぞれ何対応るファイルか)
5
+ 以下ようなデータを例説明しま
5
- を決めましょう。
6
- それが決まっていないとどういう形でデータベースに入れたらいいか、誰にも答えられません。
7
6
 
7
+ ## 入力
8
+ 前提条件
8
- > id、氏名、年齢をカラムとしたテーブ1、
9
+ 以下の二つのファイがある
9
- > id、商品名、価格をカラムとしたテーブル2を作成し、
10
- > それぞれにcsvファイル1,2をインポートして、テーブルを結合させることで、
11
- > id,氏名、年齢、商品、価格をカラムとしたテーブルを作成することができますか?
12
10
 
13
- 例えば、以下のようなファイルを
11
+ ```file1.csv```
14
-
15
- ---
16
- ファイル1
17
12
  ```
13
+ ID,氏名,年齢
18
14
  1,山田太郎,16
19
15
  2,里中智,16
20
16
  ```
21
17
 
22
- ---
23
- ファイル2
18
+ ```file2.csv```
24
19
  ```
20
+ ID,商品名,価格
25
21
  1,バット,12000
26
- 2,ボール600
22
+ 2,ボール,600![イメージ説明](6a827e5dbc480e9fc9510d95426b1874.png)
27
23
  ```
28
24
 
25
+ ## 求める結果
29
- 以下のようなテーブルにすだけなら簡単ですよ?
26
+ 入力ファイルを元に、mySQL 上に以下のようなテーブルを作こと。
27
+ ![求める結果](57dd6849e802fc20f4ddfa9312212ef2.png)
30
28
 
31
- ![テーブル](c1ddd6f6be050ebed628b3dfe8fc3087.png)
29
+ # phpmyadmin による方法
32
30
 
31
+ 以下、phpmyadmin による実現方法です。
33
32
 
33
+ phpmyadmin 自体の操作はある程度ご存じであるという前提で以下書きます。
34
+ 「 3.取り込んだテーブルから新規テーブルを作る」までの操作は、
35
+ すでにやっていらっしゃるようなので、
36
+ どういう操作をしたのかがわかる程度の最低限のスナップショットを挙げておきます。
37
+
38
+ ## 1.対象データベースの作成
39
+ ここでは、「database1」という名前で作成します。
40
+ ![対象データベースの作成](2129c0ca0ccddae42db78c8389a50730.png)
41
+
42
+ 作成後です。
43
+ ![対象データベースの作成(作成後)](f973fac09ad3a501c6e232dba24d53e5.png)
44
+
45
+ ## 2.ファイルの取り込み
46
+ ### 2-2.file1.csv の取り込み
47
+ file1.csv を取り込みます。
48
+
49
+ ![file1.csv の取り込み](e5055098a673212f928a6dbe7b2bdd7e.png)
50
+
51
+ 取り込み後です。`` `TABLE 1` `` という名前でテーブルが作られています。
52
+ (`TABLE` と `1` の間にスペースが入っているので注意が必要です。)
53
+
54
+ ![file1.csv の取り込み後](f2b8efc2b45c53138ee42677a0465d6c.png)
55
+
56
+ ### 2-2.file2.csv の取り込み
57
+ 同様に file2.csv を取り込みます。
58
+
59
+ ![file2.csv の取り込み](492823dfeaf9ba45c4ab1d6d1590e39b.png)
60
+
61
+ 取り込み後です。`` `TABLE 2` `` という名前でテーブルが作られています。
62
+
63
+ ![file2.csv の取り込み後](809ce08d911d382565a7cc89f25fb096.png)
64
+
65
+ ## 3.取り込んだテーブルから新規テーブルを作る
66
+ 以上の操作でできた二つのテーブルについて、
67
+
68
+ > この作成していただいたテーブルからID1、ID2の行を付け足さないでIDの行だけで1行のレコードを作りたいです。 1、山田太郎、16、バット、12000\が1行になるようにできないでしょうか?
69
+
70
+ という形のテーブルを作るためには、例えば、以下のような SQL を実行します。
71
+
72
+ ```SQL
73
+ create table `TABLE 3` (
74
+ SELECT `TABLE 1`.ID,`TABLE 1`.氏名,`TABLE 1`.年齢,`TABLE 2`.商品名,`TABLE 2`.価格 FROM `TABLE 1` LEFT JOIN `TABLE 2` ON `TABLE 1`.ID=`TABLE 2`.ID
75
+ )
76
+ ```
77
+
78
+ 以下のように実行すると・・・
79
+ ![SQL実行直前](0a5e6b1314b1cecd6d2d3a23e2408a3a.png)
80
+
81
+ 以下のように `` `TABLE 3` `` が作られます。
82
+
83
+ ![SQL実行後](361b1a149a55786d0a21b6dfd879dd19.png)
84
+
34
- しかし、こういうことをおっしゃっているないような気がるのですが
85
+ `` `TABLE 3` `` 内容以下のようっています。
86
+ ![TABLE 3 内容](0bfcd2cbb472aa771d441b9024f763b4.png)
87
+
88
+ ## SQL説明
89
+ このSQL は大きく二つの操作を組わせて作られています、一つは、
90
+
91
+ ```SQL
92
+ SELECT `TABLE 1`.ID,`TABLE 1`.氏名,`TABLE 1`.年齢,`TABLE 2`.商品名,`TABLE 2`.価格 FROM `TABLE 1` LEFT JOIN `TABLE 2` ON `TABLE 1`.ID=`TABLE 2`.ID
93
+ ```
94
+
95
+ の部分で、```TABLE 1``` の一行について `ID` カラムが同じ値の `TABLE 2` の行を引き当て、
96
+ `TABLE 1` から、`ID`, `氏名`, `年齢` を
97
+ `TABLE 2` から、`ID`, `商品名`, `価格` を表示させています。
98
+ それを囲む形で記述してある
99
+
100
+ ```SQL
101
+ create table `TABLE 3` (
102
+ ~前述の部分~
103
+ )
104
+ ```
105
+
106
+ の部分は、前述の部分の結果を新しいテーブルとして登録しています。
107
+

3

表を画像に変更

2016/02/28 14:22

投稿

kozuchi
kozuchi

スコア1193

answer CHANGED
@@ -28,12 +28,7 @@
28
28
 
29
29
  以下のようなテーブルにするだけなら簡単ですよ?
30
30
 
31
- | id | id1 | 氏名 | 年齢| id2 |商品名 |価格 |
31
+ ![テーブル](c1ddd6f6be050ebed628b3dfe8fc3087.png)
32
- |---:|-------:|:-------|-----:|-----:|:------|------:|
33
- |  1| 1 |山田太郎 | 16| | | |
34
- |  2| 2 |里中智 | 16| | | |
35
- |  3| | | |1 | バット | 12000|
36
- |  4| | | |2 | ボール | 600|
37
32
 
38
33
 
39
34
  しかし、こういうことをおっしゃっているのではないような気がするのですが。

2

IDを追加

2016/02/25 14:54

投稿

kozuchi
kozuchi

スコア1193

answer CHANGED
@@ -28,12 +28,12 @@
28
28
 
29
29
  以下のようなテーブルにするだけなら簡単ですよ?
30
30
 
31
- | id1 | 氏名 | 年齢| id2 |商品名 |価格 |
31
+ | id | id1 | 氏名 | 年齢| id2 |商品名 |価格 |
32
- |-------:|:-------|-----:|-----:|:------|------:|
32
+ |---:|-------:|:-------|-----:|-----:|:------|------:|
33
- | 1 |山田太郎 | 16| | | |
33
+ |  1| 1 |山田太郎 | 16| | | |
34
- | 2 |里中智 | 16| | | |
34
+ |  2| 2 |里中智 | 16| | | |
35
- | | | |1 | バット | 12000|
35
+ |  3| | | |1 | バット | 12000|
36
- | | | |2 | ボール | 600|
36
+ |  4| | | |2 | ボール | 600|
37
37
 
38
38
 
39
39
  しかし、こういうことをおっしゃっているのではないような気がするのですが。

1

例を追加

2016/02/25 14:36

投稿

kozuchi
kozuchi

スコア1193

answer CHANGED
@@ -3,4 +3,37 @@
3
3
  どういうテーブルがあって、テーブル間の関係がどうなっているか
4
4
  (二つのCSVファイルが、それぞれ何に対応するファイルか)
5
5
  を決めましょう。
6
- それが決まっていないとどういう形でデータベースに入れたらいいか、誰にも答えられません。
6
+ それが決まっていないとどういう形でデータベースに入れたらいいか、誰にも答えられません。
7
+
8
+ > id、氏名、年齢をカラムとしたテーブル1、
9
+ > id、商品名、価格をカラムとしたテーブル2を作成し、
10
+ > それぞれにcsvファイル1,2をインポートして、テーブルを結合させることで、
11
+ > id,氏名、年齢、商品、価格をカラムとしたテーブルを作成することができますか?
12
+
13
+ 例えば、以下のようなファイルを
14
+
15
+ ---
16
+ ファイル1
17
+ ```
18
+ 1,山田太郎,16
19
+ 2,里中智,16
20
+ ```
21
+
22
+ ---
23
+ ファイル2
24
+ ```
25
+ 1,バット,12000
26
+ 2,ボール600
27
+ ```
28
+
29
+ 以下のようなテーブルにするだけなら簡単ですよ?
30
+
31
+ | id1 | 氏名 | 年齢| id2 |商品名 |価格 |
32
+ |-------:|:-------|-----:|-----:|:------|------:|
33
+ | 1 |山田太郎 | 16| | | |
34
+ | 2 |里中智 | 16| | | |
35
+ | | | |1 | バット | 12000|
36
+ | | | |2 | ボール | 600|
37
+
38
+
39
+ しかし、こういうことをおっしゃっているのではないような気がするのですが。