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

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

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

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

MySQL

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

PHP

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

Q&A

解決済

3回答

1077閲覧

一対多のテーブル関係にあるデータをcsvファイルでインポート、エクスポートしたい

annderber

総合スコア98

CSV

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

MySQL

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

PHP

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

0グッド

0クリップ

投稿2018/12/06 08:56

編集2018/12/06 09:05

お世話になります。

環境
php・・・5.6
mysql・・・5.7
apache・・・2.4

現在、一対多の関係にあるデータをcsv形式でインポートエクスポート出来るようにしたいと考えています。以下テーブル構成例です。

イメージ説明

positionテーブル、permissionテーブルはユーザー毎に動的にレコード数が変わるため、
一列にしようとするとcsvのフィールド数が固定できません。
上記のようなテーブル構成をcsv形式でインポート、エクスポートしたい場合どのような構成が考えられるでしょうか。

今回の場合、実際にユーザー側でエクスポートされたcsvファイルをいじってインポートするので、
csvの構成も編集し易いようなものが求められています。

以下自分で考えてみた案(実際のテーブルよりフィールドを端折っています)
####1.重複しているデータも全て出力する
|ユーザーコード|ユーザー名|年齢|権限名|読込|書込|削除|役職|役職開始|役職終了|
|:--|:--|
|001|山田太郎|20|報告書|1|1|0|課長|2018-11-01|2018-12-01|
|001|山田太郎|20|アドレス帳|1|0|0|課長|2018-11-01|2018-12-01|
|001|山田太郎|20|報告書|1|1|0|システムエンジニア|2018-11-01|2018-12-01|

重複しているデータは上書きしていくイメージ。
さすがにこれはないかなと思っています。

####2.重複しているデータは空白全て出力する
|ユーザーコード|ユーザー名|年齢|権限名|読込|書込|削除|役職|役職開始|役職終了|
|:--|:--|
|001|山田太郎|20||||||||
||||報告書|1|1|0||||
||||アドレス帳|1|0|0||||
||||||||システムエンジニア|2018-11-01|2018-12-01|
||||||||課長|2018-11-01|2018-12-01|

1番とあまり変わらないですが、各テーブル毎に必要な項目だけ表示させ、ユーザーコードが入力されていない場合は最後に入力されているコードを対象にする。

####3.フィールドの先頭に変更したい項目名を記載させるようにさせる
|対象|ユーザーコード||||||||||
|:--|:--|
|基本|001|山田太郎|20||||||||
|権限|001|アドレス帳|1|0|0||||||
|役職|001|システムエンジニア|2018-11-01|2018-12-01|||||||

エンティティアトリビュートバリュー的な構成
一番右で対象テーブルを指定して、それ以降に必要なデータ。
対象毎に取り込む項目数が変わる。
対象毎に何番目の項目に何の値を入れる必要があるのか分からない。

####4.複数ファイルに分けてzipする
いちいちzip化するのが面倒。
ファイルが分かれていると管理しづらい。

どちらにしろすっきりとした構成は難しいのではないかと思っています。
皆様がこのような場合どういった作り方をされるかアドバイス等いただきたいです。

よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

4の実装が簡単ですが、CSVの編集がやりづらいですね。
それ用のツールやExcelマクロ等で対応というのは、設定画面で一人ずつ登録するのと同じことになってしまうので、CSVインポートのメリットが無くなってしまいます。

1がCSVファイルの作成しやすさという点で、良いと思います。

あとは2の変形で、こうとか。
|ユーザーコード|ユーザー名|年齢|権限名|読込|書込|削除|役職|役職開始|役職終了|
|:--|:--:|--:|
|001|山田太郎|20|報告書|1|1|0|システムエンジニア|2018-11-01|2018-12-01|
||||アドレス帳|1|0|0|課長|2018-11-01|2018-12-01

投稿2018/12/07 01:33

kasa0

総合スコア578

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

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

annderber

2018/12/07 06:08

コメントありがとうございます。 上に詰めちゃうっていうのはアリですね。行数も少なくなりますし。
guest

0

2次元の表ではデータを正確に表現できないために三つのテーブルに正規化されている訳なので、4以外の方法だと開発、エンドユーザによるCSV運用、メンテナンスのすべての面でかなり辛そうだと思います。

自分が実装するのであれば三つにファイルを分けて、
ユーザー情報を編集する用のCSV(業務要件的に確認が必要な役職・権限データは参照用カラムとして表示)
権限を編集する用のCSV(業務要件的に確認が必要な役職・ユーザーデータは参照用カラムとして表示)
役職を編集する用のCSV(業務要件的に確認が必要な役職・権限データは参照用カラムとして表示)
という感じでそれぞれ編集させると思います。

(要件的には無理なケースが多いですが)CSVをエクセルで運用するのであれば、マクロなりVBAなりでUIを作りこんでしまってCSV形式についてはエンドユーザが意識しないで済む形にするのが工数的には最も少なくなるとは思います。

投稿2018/12/06 09:24

tanat

総合スコア18713

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

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

annderber

2018/12/06 10:08

コメントありがとうございます。 3はそこそこありかなと思っていたのですが駄目ですかね。 VBA、マクロで管理というのは考えつきませんでした。ありがとうございます。
tanat

2018/12/06 11:01

3の場合、元のデータ構造とCSVの形式が大きく変わるので、変換と取り込みと出力に関する開発工数が純粋に増え、メンテナンス工数も大きく増えるのがネックかなと思いました。 開発、運用に十分な工数がかけられるのであれば方向性は良いと思います。
guest

0

インポート時にどう処理するかが影響するので、そこをまずどうしたいのかを考えるべきかと思います。

個人的には 1. にしますかねえ……でなければ 4. です。

投稿2018/12/06 09:16

tacsheaven

総合スコア13703

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

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

annderber

2018/12/06 09:24

コメントありがとうございます。 確かに作る側としては1番が一番楽なんですが、これはユーザー的に使いづらすぎるのかなと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問