PHPおよびMySQLのCSVへの簡単なインポート/エクスポート


オンラインストアの在庫管理統計を計算するサービスの開発中に、異なるMySQLサーバー間でテーブルのインポート/エクスポートをすばやく整理するタスクが発生しました。 単純かつ透過的にそれを行う必要があったため、最適化が先に行われるため、MySQL 5.0ドキュメントから著者の推奨事項を使用することにしました。

データ交換フォーマットとして、CSVは実装が容易なため、正確に採用することにしました。

その結果、2つの機能が判明しました

テーブルをエクスポートするMySQL構文の説明
function export_csv( $table, //     $afields, //   -    $filename, //  CSV     // (   web-) $delim=',', //    CSV  $enclosed='"', //     $escaped='\\', //     $lineend='\\r\\n'){ //      CSV $q_export = "SELECT ".implode(',', $afields). " INTO OUTFILE '".$_SERVER['DOCUMENT_ROOT'].$filename."' ". "FIELDS TERMINATED BY '".$delim."' ENCLOSED BY '".$enclosed."' ". " ESCAPED BY '".$escaped."' ". "LINES TERMINATED BY '".$lineend."' ". "FROM ".$table ; //   ,      if(file_exists($_SERVER['DOCUMENT_ROOT'].$filename)) unlink($_SERVER['DOCUMENT_ROOT'].$filename); return mysql_query($q_export); } 

コメント


テーブルのインポートMySQL構文の説明
  function import_csv( $table, //     $afields, //   -    $filename, //  CSV ,    // (   web-) $delim=',', //    CSV  $enclosed='"', //     $escaped='\\', //     $lineend='\\r\\n', //      CSV $hasheader=FALSE){ //    CSV if($hasheader) $ignore = "IGNORE 1 LINES "; else $ignore = ""; $q_import = "LOAD DATA INFILE '". $_SERVER['DOCUMENT_ROOT'].$filename."' INTO TABLE ".$table." ". "FIELDS TERMINATED BY '".$delim."' ENCLOSED BY '".$enclosed."' ". " ESCAPED BY '".$escaped."' ". "LINES TERMINATED BY '".$lineend."' ". $ignore. "(".implode(',', $afields).")" ; return mysql_query($q_import); } 

最後に何がありますか?
  1. 単一のMySQLクエリによって実行されるため、短くて非常に高速な関数。
  2. かなり柔軟な実装-フィールドのリストを含む多くのパラメーターを簡単に管理できます
    • エクスポートの場合 :フィールド配列のフィールドのリストを変更することにより
       $afields 
      または、テーブル名の代わりにサブクエリを使用します(このサブクエリのフィールドは配列で示されます)-たとえば、
       $atable 
      このようになります
       (select field1, field1 from table2) t 
    • インポートするには :カスタム変数を使用して不要なフィールドをスキップします-たとえば、
       array("column1", "@dummy", "column2", "@dummy", "column3") 
      CSVファイルの2番目と4番目のフィールドをスキップします。

したがって、開発の単純さと速度の問題は解決されます。 そして、速度と効率の問題が現れると、最適化を行うことも可能になります。

PS。 実際、これらのMySQLコマンドには設定が追加されたより豊富な構文があるため、このコードを改善する分野は必要性と想像力によってのみ制限されます。

Source: https://habr.com/ru/post/J115433/


All Articles