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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

567閲覧

カラム数の多い(200以上)csvをアップし、MySQLに保存したい

chapp

総合スコア233

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/08/29 09:41

編集2018/08/30 04:17

お世話になっております。
表題にあります、200以上の項目を有したCSVをlocalからアップロードし、MySQLに保存したいと考えています。

csvの形式は複数あるものの、納めるテーブルは1つなのでるため、CSVの項目とテーブルのカラムが一致していません。

簡単にinsert文であれば
INSERT INTO TableName ('0', ''.... 
となるのでしょうが、データの量(レコード数)含め、カラム数が200以上と多いので、どのような仕組みが効率が良いのか?そのフローなどご教示いただければと質問いたしました。

言語はPHP(7.1)で、mysqliにて作成しています。

お忙しい中恐縮ですが、アドバイスのほど頂戴出来れば幸いです。
よろしくお願い申し上げます。

■追記--------------------------------------------------------

形式の異なるCSVデータはそれぞれ別のテーブルに収めるべきとのご意見を伺いました。
誤った思考は避けたいところですが、具体的にどのような構成にすべきか?イメージが湧きません。
下記に現状の構成と、その理由を記載いたしますので、引き続きご教示いただければ幸いです。

取り扱いたいデータは不動産情報で、

・売買物件(販売中)
・売買物件(売却成約済み)
・賃貸物件(募集中)
・賃貸物件(入居成約済み)

など4つのカテゴリに別けられ、local内にあるCSVはこのカテゴリ毎に振り分けられています。

不動産情報なので、販売中の売買物件であれば、「販売価格」を筆頭に、マンションであれば「専有面積」、そして戸建てであれば、「土地面積」や「建物面積」などがあり、

制約済みの物件情報であれば「売却価格」、募集中の賃貸物件であれば「月額賃料」や「共益費」など、それぞれのカテゴリ、物件区分に応じた項目が存在し、イメージ的にCSVの内容は以下のような感じです。

・売買物件(販売中)
"物件番号","データ区分","物件区分","販売価格","有効期限"
"10010111","01","03","49800000","2018-8-30"
"10010121","01","02","85600000","2018-8-30"

・売買物件(売却成約済み)
"物件番号","データ区分","物件区分","成約価格","成約日"
"10010132","02","02","69800000","2018-8-30"
"10010139","02","04","28600000","2018-8-30"

・賃貸物件(募集中)
"物件番号","データ区分","物件区分","月額賃料","有効期限"
"10010212","03","03","98000","2018-8-30"
"10010245","03","02","48000","2018-8-30"

・賃貸物件(入居成約済み)
"物件番号","データ区分","物件区分","販売価格","成約日"
"10010111","04","02","128000","2018-8-30"
"10010121","04","02","88000","2018-8-30"

これらCSV(4種)をウェブ上のデータベースに保存するわけですが、1度の操作で検索する必要があることから、「物件情報」として1つのテーブルにデータを保存しようと考えたのが事の経緯です。

以上のことから、そのテーブルには、「販売価格」「成約価格」「月額賃料」「土地面積」「建物面積」「専有面積」など、それぞれのカテゴリ、それぞれの物件区分ならではのカラムを設け、CSVをアップするとき、(CSVはカテゴリ別に分けられているので)それぞれ適切なカラムに振り分けながら保存していく流れをイメージしています。

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

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

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

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

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

guest

回答4

0

csvの形式は複数あるものの、納めるテーブルは1つなのでるため、CSVの項目とテーブルのカラムが一致していません。

この時点で、MySQLの機能性をほぼ捨てています。複数種類のデータを混ぜこぜで入れてしまえば、それは単なるデータ置き場にしかなりません。

そして、データの入れ方を考える上では、それをどのように使うかのほうが重要となります。「データをデータベースに投入」した後にどのように使いたいのかがわからないと、最適な構造は誰にも判断できません

投稿2018/08/29 09:59

maisumakun

総合スコア145121

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

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

chapp

2018/08/30 04:23

maisumakunさん ご親切なアドバイスをありがとうございます。 「MySQLの機能性をほぼ捨てています」とのこと。良かれと思って設計したつもりでしたが、maisumakunさんをはじめ多くの方にご指摘を受け、「ならばどうしたら良いのか?」と考えているものの、なかなか良いイメージが浮かんできません。 質問文に「追記」としてCSVの構成と現在までの経緯を書き込みましたので引き続きアドバイスのほど頂戴できれば幸いです。 それと、「追記」内にも記載したCSVですが、項目数が200を超えるような構成となっており、CSVデータの取得・データの分解からinsertまで、こちらも併せてアドバイスいただけたら幸いです。 お忙しい中恐縮ですが、よろしくお願い申し上げます。
maisumakun

2018/08/30 04:46

「まとめて検索したい」のであれば、それ用に「検索用のインデックスデータを入れるためのテーブル」を立てて、あとは売買と賃貸に分けてテーブルを格納するかと思います。 さすがに売買と賃貸ではデータが違いすぎて、共用するだけ負担になると思います。
chapp

2018/08/30 04:55

maisumakunさん 早々のお返事をありがとうございます。 「検索用のインデックスデータを入れるためのテーブル」 「売買と賃貸ではデータが違いすぎて、共用するだけ負担」 なるほどですね。。具体的なイメージは湧きませんが、少し自身で考えています。 取り急ぎ、御礼申し上げます。 引き続きよろしくお願いいたします。
guest

0

使い物になるシステムにするなら、データベースの正規化 をきちんと理解した上でデータ毎にテーブルを設計して、CSVもテーブル毎にデータを分けましょう。

投稿2018/08/29 10:14

Orlofsky

総合スコア16415

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

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

chapp

2018/08/30 04:30

Orlofskyさん ご親切なアドバイスをありがとうございます。 maisumakunさんへのお返事でも書き込みましたが、良かれと思って設計したつもりだったので、全体を考えながら「ならばどうしたら良いのか?」と考えているところです。 質問文に「追記」としてCSVの構成と現在までの経緯を書き込みましたので引き続きアドバイスのほど頂戴できれば幸いですが、前提条件としてCSVが外部からのデータなるため、「そのデータには手を加えずにテーブルに収めよう」という発想でした。 お忙しい中恐縮ですが、引き続きアドバイスのほど頂戴できれば幸いです。よろしくお願い申し上げます。
Orlofsky

2018/08/30 09:07

>・売買物件(販売中) >・売買物件(売却成約済み) 契約情報は履歴テーブルに持つだろうけど、ひとつのテーブルで売却済みって情報をUPDATEするのでは? 手抜き工事が発覚して契約がキャンセルされることもありそうだし。 >・賃貸物件(募集中) >・賃貸物件(入居成約済み) こちらも履歴テーブルに持つでしょう。賃貸なら部屋が空いたらまた貸すだろうから、同じ賃貸物件マスタに[入居中]って情報を設定して、空き物件検索の対象外とするのでは? 失礼ですが、chappさんの能力では掲示板のアドバイスできちんとテーブル設計ができるとは思えません。不動産パッケージを買って使うとか、テーブル設計のプロを雇っては?
chapp

2018/08/30 10:17 編集

Orlofskyさん お疲れの中、早々のお返事をありがとうございます。 「ひとつのテーブルで売却済みって情報をUPDATEするのでは?」 「賃貸なら部屋が空いたらまた貸すだろうから、同じ賃貸物件マスタに[入居中]って情報を設定して、空き物件検索の対象外とするのでは?」 対象データが不動産物件なので、Orlofskyさんがご想像するのも無理もありませんが、CSVデータをアップする目的は、情報を共有し検索するのためであり、管理目的(アップしたデータを修正することはない)ではないのです。 とはいえ私も知識不足なのは自覚しているので、皆さまの貴重なご意見を1つでも多く伺えれば、考えるきっかけになるかな・・と。 貴重なご意見、お忙しい中でのご対応、ありがとうございました。
Orlofsky

2018/08/30 22:14

CSVでデータを管理するのは現実的とは思えません。データベースにデータを移行することを考えては? なお、mysqliよりはPDOの方がメジャーかと。
chapp

2018/08/31 04:50

Orlofskyさん お世話になっております。ご親切な回答ありがとうございます。 確かに周りを見渡せばPDOばかりが目につきます。それだけ当たり前ということですよね。考え直さなくては... 今回のCSVは外部から入手するファイルで、それを自社内で共有するためのもので(もちろん2次利用はあるのでしょうが・・)、このデータを直接管理するようなイメージは今のことろ持ち合わせてはいません。 Orlofskyさんをはじめ、teratailで多くの回答をされている方であれば、不動産物件情報と聞けば、より管理のしやすい構成を連想ゲームのようにイメージされるのかと思います。少し説明不足なところがあったかもしれません。失礼いたしました。
guest

0

インターフェースの異なる形式を一つの形式に集約したいというのはままある話ですね。
データベースは正規化されたものを扱うのが得意ですから、ファイルを高速に扱える言語で整形してからDBに取り込むのが一番だと思います。
チェックなどは一時テーブルに流し込んで、その後に行うのでもいいでしょうし。

追記

ファイルを高速に処理できる言語として、以下参考にされて下さい。
8つの言語でテキストフィルタを書き比べた
速度に大差ないなら、簡単な記述で処理が行えるような保守性の高い言語を選択した方が良いと思います。

投稿2018/08/29 15:14

編集2018/08/30 15:55
sazi

総合スコア25138

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

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

chapp

2018/08/30 04:46

saziさん ご親切なアドバイスをありがとうございます。 「一つの形式に集約したいというのはままある話ですね。」とのお言葉、良かれと思っていた構成だったので救われますが、やはりCSVの形式毎に別のテーブルに一度は保存するということでしょうか。 皆さんに再度質問をしておりますが、「ファイルを高速に扱える言語で整形してからDBに取り込むのが一番だと思います」と、このあたりのこと、もう少しアドバイスいただけないでしょうか? カラム数も多いのですが、データ量も膨大で日増しに増えるので皆さんの貴重な意見を頂きながら見直してみたいと考えています。 お忙しい名が恐縮ですが、引き続きよろしくお願い申し上げます。
sazi

2018/08/30 15:58

別なテーブルにしなくて良いように、同一形式のCSVに纏めるんです。
sazi

2018/08/30 16:02

追記見ましたが、これはレイアウトを整形後ですよね?
chapp

2018/08/31 04:37

soziさん お忙しい中での回答、ありがとうございます。 >別なテーブルにしなくて良いように、同一形式のCSVに纏めるんです。 失礼しました。確かにそのように仰っていますね。「なるほど」と思いながら、お教えいただいたサイトも拝見しました。 言語によって大きく違うものなのですね・・。私自身、使い分けるだけの知識も技量もありませんが、今後、関心をもって情報を取り入れていと思います。 >追記見ましたが、これはレイアウトを整形後ですよね? 追記にあるCSVの構成は例として記載いたしましたが、販売中のCSVと成約後のCSVは、項目数はともに200を超え、基本、項目内容と配置は異なる内容となっています。 皆様のアドバイスから改めて構成を考えていますが、データ管理等は一切行わないので、今回のテーブルは1つにまとめて問題ないだろうと落ち着いているところです。 話を戻しますが、soziさんの「これはレイアウトを整形後ですよね?」との発言が気になります。 今一度、soziさんのお考え、お聞かせいただけたら幸いです。 よろしくお願いいたします。
chapp

2018/09/06 13:46

soziさん お返事ありがとうございます。この度取った手順は、格納するテーブルは1つとし、CSVファイルをアップした際、データを物件区分ごとに(カラムを指定し)整え、inseartしていく方法を取りました。 物件区分ごとにテーブルを別けるべきとの貴重なご意見も頂戴していましたが、この度扱うデータは検索を行うだけど目的とし、管理目的は行わないことから、1つのテーブルとしました。 最後までお気にかけて頂き、ありがとうございました。 今後、また何かありましたらご質問させてください。 よろしくお願いいたします。
guest

0

ベストアンサー

最低でも種別の違うデータは別のテーブルに入れないとダメですね
それがダメなら、データを保持しておくだけを目的に
text型のデータで1カラムに全部流し込んでください

投稿2018/08/29 10:30

yambejp

総合スコア114581

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

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

chapp

2018/08/30 04:35

yambejpさんをはじめ多くの方にご指摘を受け、「最低でも種別の違うデータは別のテーブルに」の言葉を真摯に受け止めたいところです。 ただ、全体の構成を考えたとき、どのような仕組みが最も合理的なのか?がイメージ出来ず、質問欄に「追記」として、CSVの構成、そして1つのテールブル収めようと考えた経緯を記載いたしました。 お忙しい中恐縮ですが、引き続きアドバイスのほど頂戴できれば幸いです。 それと、「追記」内にも記載したCSVですが、項目数が200を超えるような構成となっており、CSVデータの取得・データの分解からinsertまで、こちらも併せてアドバイスいただけたら幸いです。 よろしくお願い申し上げます。
chapp

2018/08/30 04:37

yambejpさん ご親切なアドバイスをありがとうございます。 yambejpさんをはじめ多くの方にご指摘を受け、「最低でも種別の違うデータは別のテーブルに」の言葉を真摯に受け止めたいところです。 ただ、全体の構成を考えたとき、どのような仕組みが最も合理的なのか?がイメージ出来ず、質問欄に「追記」として、CSVの構成、そして1つのテールブル収めようと考えた経緯を記載いたしました。 お忙しい中恐縮ですが、引き続きアドバイスのほど頂戴できれば幸いです。 それと、「追記」内にも記載したCSVですが、項目数が200を超えるような構成となっており、CSVデータの取得・データの分解からinsertまで、こちらも併せてアドバイスいただけたら幸いです。 よろしくお願い申し上げます。 ※メモ帳で下書きをしたものをコピペしたのですが、初めのお礼が抜けていました‥失礼しました。
yambejp

2018/08/30 04:46

契約前と後は合体できそうですね ・物件番号 ・データ区分 ・物件区分 は共有でき、物件番号をもとに正規化してもよいでしょう 販売価格と成約価格 有効期限と成約日 は上書きするか元データを保持しておくか運用によります 売却と賃貸を合体させるなら あらたなカラムとして仮に「形態」をつくり売却または賃貸を保持します 賃貸料金と売却料金欄は共用してもいいですが あえて分けたほうが集計しやすいかも
chapp

2018/08/30 04:59

yambejpさん 早々のお返事をありがとうございます。 貴重なアドバイスをありがとうございます。 データ量、カラム数が(私にしては)膨大なので、皆さんのご意見を頂戴しながら見直したいと思います。 取り急ぎの御礼ですが、引き続き、よろしくお願いいたします。
sazi

2018/09/03 03:44

解決されましたが、どのように決着されたのか不明ですね。 気になる点としては、「text型のデータで1カラムに全部流し込んでください」を採用されているならそれは意味のないことです。 なぜなら中身を取り出して編集するのなら、ファイルの時点で行うほうが効率的だからです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問