重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

データベースのテーブル内容をサーバー上にcsv出力すると同時に出力した内容を配列で取得できないでしょうか?(PDOを利用しています)

$sql= "SELECT id, name FROM tb INTO OUTFILE '/tmp.csv'";
$stmt = $dbh->query($sql);

これでcsvは出力されるのですが、csv出力した内容を配列で取得したく、

$array = $stmt->fetchAll(PDO::FETCH_ASSOC);

をするとGeneral Errorとなります。

先にSELECTで内容を配列で取得してから配列のループでcsvの内容を作成し、出力する方法もありますが、データ量が数十万件あるのでループ処理が遅い気がしています。

良い方法があればお教えください。
よろしくお願い致します。

A 回答 (2件)

流れ的にはこんな感じでどうでしょう?



(1)テンポラリテーブルに未出力のデータidをはきだす
(2)テンポラリに合致するデータをcsvに出力する
(3)出力後テンポラリを元にデータテーブルのoutputカラムをアップデートする
    • good
    • 0
この回答へのお礼

遅くなってすみませんでした。
今試してみてうまくいきました!
どうもありがとうございました!!

お礼日時:2014/04/17 17:22

>csv出力すると同時に出力した内容を配列で取得



普通にCSVデータをPHPで読めばいいのでは?

>データ量が数十万件ある

数十万件のデータをそのまま配列でもってどうするつもりでしょう?
データはCSVで担保されているのですから、わざわざプログラム的にもつ
意図がわかりません。メモリ的にも厳しい処理でしょうし

なんらかの集計やデータ抽出が必要ならSQL側でやれば済むので・・・
    • good
    • 0
この回答へのお礼

ありがとうございます!

csvで出力した行を「出力済み」というフラグでDBのカラムをUPDATEしたいのです。

例えばカラムが"id", "name", "output"となっていた場合、csvで出力した行の"output"を0から1にUPDATEしようと考えています。

なので

SELECT id, name FROM tb INTO OUTFILE '/tmp.csv'

としたidを配列で持てればそのidをWHEREに指定してUPDATEできると思ったのです。

お礼日時:2014/04/14 22:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す