お世話になっております
大量のデータをcsvからMYSQL(phpmyadmin)へインポートいたしました。original_tableをご覧ください。実際にはカラムが60近くあり、レコードも4万行以上に及び、今後増えていく予定です。
本tableを加工して新しいデーブルtransfer_tableに流し込みたいと考えております。
ここで、このようなテーブル移動させたい理由は以下の2つが挙げられます。
①csvの段階では一意の情報を持っていないため、transfer_tableに4colにあるように、php側の処理で一意のカラムを作り出し、新たに格納するため。
②今後、月次で同じような大量のデータをcsvでインポートしていくのですが、(例えばFEB.csv MAR.csv)追加されるcsvにはすでに過去にインポートしたレコードと重複するものが存在するため、 INSERT IGNORE INTOでPRIMARY KEY重複するものを判定して、必要なデータだけを蓄積するtransfer_tableを作ることを考えております。したがって、毎月dummyのoriginal_JAN_table,original_FEB_table,original_MAR_tableは生成されていきますが、全く重複のない最終的な目的となるテーブルはtransfer_tableとなります。csvインポートの操作では、IGNOREのように、必要にないデータを無視してくれるようなことをphpmyadmin上できないため、このような設計にしております。
従って、phpコードとしてはtransfer.phpのようなイメージとなります。
【ご質問】
ここで問題なのですが、そもそもoriginal_JAN_tableから全てのデータを取得しようとしてくるとブラウザ上、「XXXXX.XXXXX.jp では現在このリクエストを処理できません。」と表示されて、処理ができません。where 句で条件を指定すれば一部のデータは取得できたので、おそらく一気に全ての60カラム4万行のデータを配列の値に格納して取得しようとすると、このようにエラーが出てしまいます。ちなみにサーバーはロリポップレンタルサーバーです。
このように大量のデータを一気に取得して、処理することは不可能なのでしょうか?
また、これが不可能だとした場合、上記のような目的はどのように対応することが考えられるのでしょうか。
何卒、よろしくお願い申し上げます。
original_JAN_table JAN.csvデータ 1col 2col 3col 1 A 100 transfer_table csvデータ 1col 2col 3col 4col 1 A 100 1-A
transfer.php $stmt = $pdo->query('SELECT * FROM original_JAN_table'); $result = $stmt->fetchall(PDO::FETCH_ASSOC); //ここから全ての値を出力し、phpで一意の値を作成するイメージ// $stmt1 = $pdo->prepare('INSERT IGNORE INTO transfer_table (col1,col2,col3,col4) VALUES (:a,:b,:c,d:)'); $stmt1->bindValue////省略// $stmt1->execute(); //phpで作成した新たな値を含む配列を重複しないようにIGNOREで最終目的のtranser_tableにINSERT INTOする//
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。