質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Q&A

解決済

1回答

4433閲覧

2つのcsvファイルを、IDをキーとして1つのデータベースに登録したい

norio5

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

0グッド

0クリップ

投稿2016/02/25 12:44

id、氏名、年齢が記録されているcsvファイル1と、id、商品名、価格が記録されているcsvファイル2があり、mysqlを使って、一つのデータベースに登録する方法を教えてください。
その際、idが同じものの列には、氏名、年齢、商品名、価格が統一されるようにしたいです。

あらかじめ、id、氏名、年齢、商品名、価格をカラムとして登録したデータベースを作成した後、phpmyadminでファイルを順にインポートしようとしたのですが、カラムが一致しないため無理でした。
先にファイルを結合させなければいけないのでしょうか?
SQLを用いれば、2つのファイルから同時に登録することはできるのでしょうか?

プログラミング初心者なので、勘違いしている点があるかもしれませんので、意味の分からない点がありましたらご指摘お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kozuchi

2016/02/25 12:59

「idが同じものの列には、氏名、年齢、商品名、価格が統一されるようにしたいです」→このIDは、何のIDですか?
norio5

2016/02/25 13:09

顧客idになります。2つのcsvファイルで唯一、一致するものを例としてidにしただけですので、2つのファイルに1つだけ同じカラムがあると考えていただければと思います。
coco_bauer

2016/02/25 13:18

あらかじめ、id、氏名、年齢、商品名、価格をカラムとして登録したデータベースを作成し、それに顧客のcsvファイルからid,氏名,年齢,"不明",0というレコードを追加していく("不明"と0は、商品名と価格に設定する仮の値です)。続いて商品のcsvからidを1つ取り出し(仮にID1とします)、先ほどのDBをwhere id=ID1でSELECTして、そのレコードにUPDATEで商品名と価格の値を設定する、というようなシナリオになるかと思いますが。。。
norio5

2016/02/25 13:42

わかりやすい説明ありがとうございます。 流れはよく理解できたのですが、ほんとにプログラミング初心者のため レコードの追加、idの取り出し、SELECT、UPDATE、の個々の操作がわかりません。(レコードの追加はできそう、、?) よろしければおしえていただけませんか?
norio5

2016/02/25 15:10

回答への返信がこちらであってるのかわかりませんが、kozuchi様へのお返事を書かせてもらいます。 この作成していただいたテーブルからID1、ID2の行を付け足さないでIDの行だけで1行のレコードを作りたいです。 1、山田太郎、16、バット、12000\が1行になるようにできないでしょうか?
guest

回答1

0

ベストアンサー

「情報の追加・修正の依頼をする」に答えてくださったおかげで、
ご質問の詳細がわかりましたので、それに合わせて回答も書き換えさせていただきます。

以下のようなデータを例に説明します。

入力

file1.csv

ID,氏名,年齢 1,山田太郎,16 2,里中智,16

file2.csv

ID,商品名,価格 1,バット,12000 2,ボール,600![イメージ説明](6a827e5dbc480e9fc9510d95426b1874.png)

求める結果

入力ファイルを元に、mySQL 上に以下のようなテーブルを作ること。
求める結果

phpmyadmin による方法

以下、phpmyadmin による実現方法です。

phpmyadmin 自体の操作はある程度ご存じであるという前提で以下書きます。
「 3.取り込んだテーブルから新規テーブルを作る」までの操作は、
すでにやっていらっしゃるようなので、
どういう操作をしたのかがわかる程度の最低限のスナップショットを挙げておきます。

1.対象データベースの作成

ここでは、「database1」という名前で作成します。
対象データベースの作成

作成後です。
対象データベースの作成(作成後)

2.ファイルの取り込み

2-2.file1.csv の取り込み

file1.csv を取り込みます。

file1.csv の取り込み

取り込み後です。`TABLE 1` という名前でテーブルが作られています。
TABLE1 の間にスペースが入っているので注意が必要です。)

file1.csv の取り込み後

2-2.file2.csv の取り込み

同様に file2.csv を取り込みます。

file2.csv の取り込み

取り込み後です。`TABLE 2` という名前でテーブルが作られています。

file2.csv の取り込み後

3.取り込んだテーブルから新規テーブルを作る

以上の操作でできた二つのテーブルについて、

この作成していただいたテーブルからID1、ID2の行を付け足さないでIDの行だけで1行のレコードを作りたいです。 1、山田太郎、16、バット、12000\が1行になるようにできないでしょうか?

という形のテーブルを作るためには、例えば、以下のような SQL を実行します。

SQL

1create table `TABLE 3` ( 2SELECT `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 3)

以下のように実行すると・・・
SQL実行直前

以下のように `TABLE 3` が作られます。

SQL実行後

`TABLE 3` の内容は以下のようになっています。
TABLE 3 内容

SQL説明

このSQL は大きく二つの操作を組わせて作られています、一つは、

SQL

1SELECT `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

の部分で、TABLE 1 の一行について ID カラムが同じ値の TABLE 2 の行を引き当て、
TABLE 1 から、ID, 氏名, 年齢 を
TABLE 2 から、ID, 商品名, 価格 を表示させています。
それを囲む形で記述してある

SQL

1create table `TABLE 3` ( 2~前述の部分~ 3)

の部分は、前述の部分の結果を新しいテーブルとして登録しています。

投稿2016/02/25 13:32

編集2016/02/28 14:23
kozuchi

総合スコア1193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

norio5

2016/02/25 13:55

ありがとうございます。 根本的な理解が足らず恐縮です。お返事を参考に考えたのですが、 id、氏名、年齢をカラムとしたテーブル1、 id、商品名、価格をカラムとしたテーブル2を作成し、それぞれにcsvファイル1,2をインポートして、テーブルを結合させることで、id,氏名、年齢、商品、価格をカラムとしたテーブルを作成することができますか?
t_obara

2016/02/25 14:03

できますよ。 sqlコマンドとjoinがキーワードでしょうか。
norio5

2016/02/25 15:26

ありがとうございます。調べてみます!
norio5

2016/03/01 07:53

お返事が遅れてしまいもうしわけありませんでした。 とてもわかりやすい説明で、解決することができましたので、ベストアンサーとさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問