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

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

ただいまの
回答率

90.33%

  • PHP

    21413questions

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

  • MySQL

    6207questions

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

  • CSV

    712questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 84

annderber

score 71

お世話になります。

環境
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化するのが面倒。
ファイルが分かれていると管理しづらい。

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

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 15:08

    コメントありがとうございます。

    上に詰めちゃうっていうのはアリですね。行数も少なくなりますし。

    キャンセル

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/06 19:08

    コメントありがとうございます。

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

    キャンセル

  • 2018/12/06 20:01

    3の場合、元のデータ構造とCSVの形式が大きく変わるので、変換と取り込みと出力に関する開発工数が純粋に増え、メンテナンス工数も大きく増えるのがネックかなと思いました。

    開発、運用に十分な工数がかけられるのであれば方向性は良いと思います。

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/06 18:24

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

    キャンセル

同じタグがついた質問を見る

  • PHP

    21413questions

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

  • MySQL

    6207questions

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

  • CSV

    712questions

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