いくつかの一般的なフィールドを持つタイムシートのデータベース テーブルがあります。
id, client_id, project_id, task_id, description, time, date
他にもありますが、要点は以上です。
ユーザーにデータのバックアップを提供するために、そのテーブルで CSV ファイルへのエクスポートを一晩実行しています。また、一部のカスタム レポートを含むマクロ Excel ファイルのデータ インポートとしても使用されます。
これはすべて、php を使用してタイムシートをループし、行をファイルに出力することで機能します。
問題は、実行に数時間かかる可能性がある大規模なデータベースでは許容できないことです。そこで、MySQL コマンドで書き直したところ、INTO OUTFILE実行にかかる時間が数秒に短縮されました。これは素晴らしいことでした。
現在の問題は、説明フィールドのすべての改行文字などをエスケープできないように見えることです。実際、ユーザーは改行/改行を含む任意の文字の組み合わせをここに入力できます。
これは、私が持っている MySQL コードのスニペットです。
SELECT id,
client,
project,
task,
REPLACE(REPLACE(ifnull(ts.description,''),'\n',' '),'\r',' ') AS description,
time,
date
INTO OUTFILE '/path/to/file.csv'
FIELDS ESCAPED BY '""'
TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM ....
しかし...
出力ファイルのソースを見てみると、改行がまだファイルに存在するため、Excel の CSV インポートは、Excel ウィザードが作成したすべての派手なマクロとピボット テーブルを壊します。
最善の行動方針について何か考えはありますか?