• ベストアンサー

MySQLにEXCELやCSVなどでの一括登録

レンタルサーバー上のMySQLにローカル上のEXCELで作成するデータを登録しようとしています。 過去ログ等を調べたのですが、自分で質問することにしました。 http://oshiete1.goo.ne.jp/qa1244588.html MySQLとPHPでwebに公開するサイトを作っています。 データベースはphpMyAdminより操作しています。 データ登録時なのですが、登録する項目(フィールド)と、件数(レコード)が多いので、 phpMyAdminだと一度に登録できるのが、2件とブラウザ上での作業になるので、 間違いや、確認等の効率がかなり悪くなります。 エクスポートでEXCELやXML、CSVなどがあるので、インポートでも使えるのではないかと考えました。 そこで過去ログやweb上で情報を探し、CSVなどをインポートしてみたのですが、エラーが表示されます。 過去ログで見つけました、ODBCドライバというのは必要なのでしょうか。 またそれはレンタルサーバーでも使用可能なのでしょうか。 EXCELなどのソフトを使って、ローカル上でデータを作成・管理したいと考えています。 何か良い方法はないでしょうか。 環境: Mac OSX.4  (基本Macで作業しています) Windows XP sp2 レンタルサーバ: MySQL 4.1.10a phpMyAdmin 2.6.4-pl4 PHP4(ver.4.3.8) 宜しくお願いします。

  • MySQL
  • 回答数5
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.5

しばらくアクセスできなかったので、だいぶ日が経ってしまいましたが、まだみてますか? >1.excelから csv形式で保存 このcsv中にtableの全行のデータがあるなら、 >6.load 用のsql文実行 (全行追加) この前に、table内の全行削除「DELETE FROM table_name」をしてから、全行追加すれば、全行置き換えになります。 >phpは少し触れます。 失礼しました。 phpで全自動化を行うなら、csvデータの量にもよるけど、 アップロードフォームに<textarea> でcsvの内容を入れて送信。量が多ければ、<input type="file">を使用。 受信側では、<textarea name="csv">のデータ$_POST["csv"]をMySQLデータ領域にcsvファイルとして書き出したのち、 「ファイル書き込みは、PHPマニュアルのint file_put_contents ( string filename, string data [, int flags [, resource context]]) あたりの関数をチェック」 MySQLに接続して、「接続方法はPHPマニュアルのMySQL関連関数を熟読のこと」 table内の全行削除のSQL文とload 用のsql文とを実行 と言う手順になるかな。 一遍に作ろうとせず、一つ一つ実行確認しながら組み上げていくとよいです。

参考URL:
http://jp.php.net/manual/ja/
daigensui
質問者

お礼

返事大変遅くなり申し訳ございません。 そしてありがとうございます。 アレから、いろいろと試行錯誤して実行しているのが、 phpMyAdminでMySQLに二つのテーブルを作成して、 アップロード用テーブルと実際に反映させるテーブルにわけて、 アップロード用テーブルから、phpMyAdminのエクスポートで書き出して、テーブル名を一括変更してから、反映させることにしました。 アップロード方法は自力で登録フォームを作成して、登録する事に成功しました。 まだ、ブラウザ上での一覧表示、検索、編集機能等はないのですが、 これから作っていくつもりです。 今回の件は大変勉強になりました。 ありがとうございます。

その他の回答 (4)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.4

load文は追加です。同じcsvファイルに対して2回実行すると、2重ロードエラーになります。 >phpで専用プログラム ftpソフトの起動の手間を省くための、ファイルアップロード用と言うだけです。 よけいな説明しすぎたようです(どうやら、phpプログラムもまだ書けないようですので)。まずは、プログラミングの必要のない以下の手順でちまちまやって下さい。 1.excelから csv形式で保存 2.ftpソフトを起動 3.MySQLから見えるデータ領域へcsvファイルをアップロード (アップロード先を訂正、load文を実行するのはMySQLなので) 4.ブラウザを起動 5.phpMyAdminにアクセス 6.load 用のsql文実行 (全行追加) 追加ではなく、既にあるレコードの上書き変更ならcsvで一気にはいきません。 変更レコード毎に、update文を作る必要があります。 まずはSQL文を理解しないことには、次には進めないと思います。 http://dev.mysql.com/doc/refman/4.1/ja/

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/data-manipulation.html
daigensui
質問者

補足

ありがとうございます。 phpMyAdminでloadするのですね。 ローカル上に常に最新のデータ(excel又はcsvデータ)を保持している場合、 phpMyAdmin上でフィールドの内容を毎回削除して、一括登録していくことはできないのでしょうか? phpは少し触れます。こちら側で管理していく上で、mysqlへ登録する一番最適な方法を探しています。 宜しくお願いします。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

csvファイル経由でできませんかね。 excelから必要データをcsvファイルに変換出力して、そのファイルをphpMyAdminの実行できるサーバーへアップロードしたうえで、 以下のsql文を実行すれば、csvの一行がtableの一行相当で一遍にインポート出来るはず。 load data infile 'taisyo.csv' into table tablename fields terminated by ',' enclosed by '"' lines terminated by '\r\n'; csvファイルの項目順やデータ型はtableの設定に先に合わせておくこと taisyo.csv は、phpMyAdminから見えるところに置くこと 最後の改行コード指定は、MACだと'\r' だったと思うが、MAC版excelでcsv出力した時どうなるのかは、調べてみて下さい。 また、ftpでのアップロード時にアスキー転送すると、サーバー側の改行コードに変換されるのも要注意。 phpMyAdminにファイルアップロード機能があればそれを使えばよいですが、なければ、phpで別に専用プログラムを作っての実行でもよいでしょう。

daigensui
質問者

補足

ありがとうございます。 >load data infile 'taisyo.csv' into table tablename fields terminated by ',' enclosed by '"' lines terminated by '?r?n'; 試してみようと思うのですが、これは、上書きされるのでしょうか?追加されるのでしょうか。 phpで専用プログラムというのは、 INSERT INTO table ('name') VALUES ('$name'); などに、該当する$nameの部分をCSVに記述されている値を代入してやって、データベースに登録!ってことでしょうか? もし、それがあれば、ローカル上にある最新のexcelデータを上書き登録できるということなのでしょうか。もしくは追加していけるということなのでしょうか?

  • mooboogie
  • ベストアンサー率68% (28/41)
回答No.2

ちょっと質問本筋と関係がないVBAの話をしてしまい、惑わせてしまうようで心苦しいですが。 Insert文が記述されたファイルを作ればインポートできますね、というのが前提のお話です。 なので、VBAでもC#でも、何でも良いとは思います。 ただ、VBAは、エクセルに付いているプログラミング環境なので、都合が良いという思いから、前回そのように書きました。 >VBAを使用することによって、ExcelファイルがSQLに変換されると考えてよかったでしょうか 変換というより、”Insert文が羅列されたファイル”を出力するプログラムを書くということです。 前回仰っていたODBCによるデータベースへのアクセス・データ入力も可能だと思います。 (やったことはないので、だと思います、にしておきます^^;) が、レンタルサーバが、ODBCによる接続を許す設定になっているとは思えないので、今回のケースではムリ※だと思います。 ※その理由 http://www.mysql.gr.jp/Manual/mysql-3.23.16/manual.ja_Reference.html#GRANT Grant文で、ODBC接続ユーザに「grant ~ to ユーザ@"192.168.0.%"」的な権限付与しないといけないらしいので、レンタルサーバ屋さんとしてはムリなような気がします。 IDとパスワードがあるから大丈夫なのかな? 横道にそれました。 ツラツラ書きましたけど、要はエクセルとかCSVとかのファイルを指定してドンで、ラクラクImportはムリじゃね?というのが主旨です。 Insert文を全データ分作るしか思いつかないなぁ、というところです。

daigensui
質問者

お礼

ありがとうございます。 Insert文を作成する為に、VBAを使用するってことですね。 VBA等調べてみます。

  • mooboogie
  • ベストアンサー率68% (28/41)
回答No.1

わたしの環境だと、インポートはSQLしか受け付けないようで、その他の入力形式が許されるのかは知りません。 Excelファイルをダイレクトに読む込むのと違って、SQLファイルへ変換する工程がひとつ増えますが、VBAなどを利用して、insert文記述ファイルを作成するのが、近道なような気がします。 for cells(1,1) to cells(1,1).currentregion.rows.count buf = buf & "insert into tab values ..." loop で、変数bufの内容をファイル書き込みすればインポートファイルが比較的簡単に作成できますね。 ただし、250行程度置きに区切り(一つのInsert文にする)を入れないとわたしの環境だとエラーになりました。 ※行数と、エラー内容は忘れました。 ちょっと質問本筋から外れているようなので、このへんで。

daigensui
質問者

お礼

ありがとうございます。 VBAですか、まだ聞いたことくらいしかない物なのですが、 それで可能であるならば、今から調べていきたいと思います。 VBAを使用することによって、ExcelファイルがSQLに変換されると考えてよかったでしょうか。

関連するQ&A

  • インターフェースからCSVを取り込んで、MySQLにインポート

    インターフェースからCSVを取り込んで、MySQLにインポート ブラウザのインターフェースからCSVファイルを選択して、MySQLにインポートするようにしたいのですが、 (1)ファイルのアップロード (2)サーバー上にある(アップロードされた)CSVファイルをMySQLにインポート という手順で処理するほかないでしょうか? ローカルのCSVファイルを直接MySQLにインポートするような画期的な方法(ライブラリなど)あったらいいなと思い質問します。 PHPのバージョン:5.2 MySQLのバージョン:5.1 です。 まだ基本設計の段階なので、具体的な質問になっておらず申し訳ありませんが、 よろしくお願いします。

    • 締切済み
    • PHP
  • CSVインポート,日本語文字化け

    宜しくお願いします。 大量のデータを、Excel->CSV出力->Mysqlインポートの手順で行いたいと思っています。 コマンドラインやphpmyadminから何度も試したのですが、日本語(varchar(),ujis_japanese_ciで設定)を扱うカラムは、データをインポート後、空欄または'???'などの表示となり、見える形でデータが反映できません。 キャラクターセットの問題と考えて、教えてgooやmysql-MLなどの過去ログは、自分なりに見たのですが、過去ログにある方法を実行するも解決に至りません。(csvファイル、コマンド、受取側の設定で、EUC(ujis),SJIS,UTF-8の組合せで試行錯誤しましたが、いずれも駄目でした。) どんな些細な事でも結構です。解決の糸口だけでも見出したいと思っておりますので、是非ともご助言をお願い致します。 環境) OS FedoraCore 6|MySQL 4.1.22|PHP 5.0.4|phpmyadmin 2.10.0.2

  • phpMyAdminでのデータのインポートについて

    はじめまして。 レンタルサーバーで、MySQLを利用しています。 利用しているレンタルサーバーは、TELNETなどは利用できず、MySQLのデータベースを管理するのに、phpMyAdminを利用するようになっています。 用意したCSVファイルをサーバーのデータベースにインポートしたら、csvファイルが2MBを超えており、phpMyAdminの管理画面のインポートからは、2MB以内に分割しないとアップできませんでした。 分割するのが面倒なので、1回でインポートできないかと思い調べたら、 SQLで、LOAD DATA INFILE でインポートできないかと思い試してみました。 最初は、LOCALというのを入れずにやったらエラーが出たのですが、これは、同じサーバーにアップされたファイルからインポートというこなので、権限がないので無理ということがわかりました。 そこで、LOCALをつけて試しました。 ●試したSQLの内容 LOAD DATA LOCAL INFILE 'c:\mihon.txt' REPLACE INTO TABLE test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; 上記をphpMyAdminのSQLのとろこで、実行したのですが、エラーなどは表示されずに完了するのですが、データはインポートされていませんでした。 レンタルサーバーで、phpMyAdminを利用している場合に、LOAD DATA INFILEでファイルをインポートできないのでしょうか?上記のSQLの書き方に問題があるのでしょうか? 初心者なのであまりうまく説明できませんが、大容量のCSVファイルをphpMyAdminからアップするには、なにかよい方法はありますでしょうか? ご回答よろしくお願い致します。 ●サーバーの環境 ・MySQL利用可能で、phpMyAdminでのみ利用可能 ・データベースは、ユーザーサーバーとは別に設置 ・MySQLのバージョンは、4.0.26 ・phpMyAdminのバージョンは、2.7.0

  • mysqlにcsvを importしたい。

    初心者です。 http://www.phpkode.com/scripts/item/quick-csv-import/ のQuick CSV import 1.0にて mysqlにcsvをインポートしようとしてもヘッドの題名しかインポートされません。 データーがインポートされないのです。 Access denied for user '*****'@'****' (using password: YES) というエラーが出ます。(*)はdatabasenameと(@'****' (この意味は分かりません))です。 いろいろいじってるのですが、状況は変わりません。 phpmyadminから見ると ヘッドの部分(1行めの題名)はインポートできているので このエラー文のせいかどうかもわかりません。 データー、題名ともすべて半角英数です。 実際にこのフリーソフトのことではなくても、 症状に対するヒントだけでも頂きたいと思っています。 どうかよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MYSQLのcsvインポートについての質問です。

    MYSQLのcsvインポートについての質問です。 myadminからEXCELのcsvのインポート作業を行っております。 日本語等は、sift-jisに変換して正常に表示されます。 しかし、電話番号が表示されません。 インポートは正常に行われていると思います。(インポートの際に表示されるコメントで確認) ページの遷移の際には一瞬データが見えます。 また、SQLでデータ追加を行った場合には正常に表示されます。 電話番号のデータは123-123-1234です。 フィールドはvarchar(16)です。 どなたか、お分かりになる方よろしくお願いいたします。

  • MySQLデータベースにcsvファイルインポートで、エラー

    csvファイルインポートで、エラー phpMyAdminからMySQLデータベースに、csvファイルのインポートを試みたところ、 「CSV 入力のフィールド数が不正です(行: 17)」と表示され、うまくいきません。 データベースの中を確認すると、60レコードのうち、15レコードまでは正常にインポートされています。 元のcsvファイルを確認しても、mysql側とフィールド数は一致しており、問題はないように見受けられました。 phpMyadminのバージョンが、2.6.1-pl3から 2.10.0.2に変わった後、上記の問題が発生するようになりました。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPとMySQLについて

    社内サーバーにWebアプリをUPし、 全てデータベース管理にするため、MySQLを使用しました。 参考書を見ながら作成したため、構文に間違いはありません。 参考書は「 はじめての人のためのかんたんPHP + MySQL入門」です。 この参考書の第8章にあるWEBアプリを忠実に再現しました。 しかし、フォームに情報を入力し、登録を押しても情報が反映されません。 以上と同じように、ぶっとびねっと(フリーレンタルサーバー)でもUPし、phpMyAdminでDBを構築しましたが、 これも同じく登録情報が反映されませんでした。 無論、phpMyAdminから直接CREATEし、HPに情報を反映させるのは可能です。 その際、日本語が???となってしまいましたが、その他は正常です。 一番の問題は、なぜHPから情報を入力し、それがDBへ反映されないのかです。 .htpccessやPHP.iniの設定と何か関係があるのでしょうか? 社内サーバーに.htaccessファイルは無いそうです。 となると、php.iniだと思います。 私は初心者のため、イマイチPHP.iniが良く分かりません。 ローカルにApacheなどを落とした場合は、C:Windowsの中にPHP.iniの設定をいじればいいと思いますが、 社内サーバーの場合、サーバー上のどこかにあるPHP.iniファイルの設定を変える必要があるのでしょうか? 以上、ごちゃごちゃしてて申し訳ありませんが、 お助け下さい。

    • ベストアンサー
    • PHP
  • MySQL 大量データの登録について

    ただ今 MySQL(&PHP)の勉強中です。 必要になりそうな部分は おおざっぱに理解したつもりなので さっそくデータベース構築に入ろうとしてます。 が、いきなりつまづいてしまいました。 作ろうとしてるのは、 Web上で管理者(自分)が登録したデータをユーザーが検索、閲覧できる という、変哲もないシステムで、 データはcsv等の既に手元にある物を流用するつもりでしたが その方法がわかりません。 最悪、全部手入力してやる 位の勢いはあるのですが もっと賢い方法があるように思います。(あって欲しいです) 簡単に言うと MySQLへcsvのインポートは可能か。 可能であればその方法。 その他の大量データ登録方法の存在。 などが知りたいです。 なにぶん勉強中ですので、この質問自体おかしな所があるかも 知れませんが、御教授よろしくお願います。

  • MySQLのテーブルに、CSV形式のデータ・・・

    MySQLのテーブルに、 CSV形式のデータを、まとめてinsertしたいのですが、どうすればいいのでしょうか? なお、レンタルサーバは、VPSで、 host guestともRHELです。 phpmyadminも使えまして、それでできるかどうかわかりませんが、 簡単でかつ待ちがわない方法を知りたいです。 できれば、大量のデータをいっぺんにinsertしたいです。 以前、、つみきCSEや、Access(XP?)でやろうとしたことはあります。 ただ、データを大量に1度はできなかったきがします。 ==== あと、これが簡単かどうかわかりませんが、コマンドラインからできますでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • 大容量CSVのインポート方法を教えて下さい

    いつもお世話になっています。 どうしても自分で解決出来なかったので質問させて下さい、宜しくお願い致します。 ----------------------------------------------- <環境> ・さくらのレンタルサーバー ・管理ツールphpmyadminを使用 <やりたい事> ・80MB以上のCSVを一度にインポートしたい(カラム数などは一致している) <問題点> ・phpmyadminのインポートは最長: 16,384 KB ・インポート時に「SJISエンコーディングへ変換」する必要がある ----------------------------------------------------- 現状は、CSVファイルをローカルでサイズ指定分割して 細かくインポートを行っています。 ですが、毎日行う作業なのでとても不便に感じているので ツールもしくはプログラムで対処出来ないかと捜索中です。 自分の知識は、VBA&PHP&C#が触った程度。oracleSQLがまぁまぁ出来る程度です。 何か良い方法は無いでしょうか? ご教授お願い致します。 もし足りない情報があれば指摘して下さい。 宜しくお願い致します。

    • ベストアンサー
    • MySQL