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コマンドには設定が追加されたより豊富な構文があるため、このコードを改善する分野は必要性と想像力によってのみ制限されます。



All Articles