2013-10-04 2 views
1

Я пытаюсь экспортировать около 20 тыс. Записей из таблицы в mysql в csv, и, как и ожидалось, это сбой моей системы, есть ли альтернатива этому, чтобы избежать сбоев ?экспорт 20k или более записей из MY SQL в CSV с использованием php

вот мой текущий код экспорта:

$filename2 = "csv/leads_".date("M-d-Y",time()).".csv"; 
      $fp2 = fopen($filename2, 'w') or die("can't open file"); 

      $sql2 = $sql_getcustomers; 
      $res2 = mysql_query($sql2); 

      // fetch a row and write the column names out to the file 
      $row2 = mysql_fetch_assoc($res2); 
      $line = ""; 
      $comma = ""; 
      if($row2){ 
       foreach($row2 as $name => $value) { 
        $line .= $comma . '"' . str_replace('"', '""', $name) . '"'; 
        $comma = ","; 
       } 

       $line .= ",crm_group"; 
       $line .= "\n"; 
       fwrite($fp2, $line); 

       // remove the result pointer back to the start 
       mysql_data_seek($res2, 0); 

       // and loop through the actual data 
       while($row2 = mysql_fetch_assoc($res2)) {  
        $line = ""; 
        $comma = ""; 
        foreach($row2 as $index => $value) { 
         $line .= $comma . '"' . str_replace('"', '""', utf8_decode($value)) . '"'; 
         $comma = ","; 
        } 

        //** GET THE CRM GROUPS 
        $sql_get_group = "SELECT a.crm_group_name, b.* FROM tbl_crm_members b JOIN tbl_crm_groups a ON (a.crm_gid = b.crm_groupid) WHERE crm_uid = ".$row2["uid"]; 
        $sql_get_groups = mysql_query($sql_get_group); 
        $res_get_groups = ""; 
        while($sgg = mysql_fetch_object($sql_get_groups)) $res_get_groups .= $sgg->crm_group_name.";"; 
        $line .= ",".trim($res_get_groups, ";"); 
        $line .= "\n"; 
        fwrite($fp2, $line);  

       } 
       fclose($fp2); 

ответ

2

Почему бы не позволить MySQL это сделать?

SELECT id, name, email INTO OUTFILE '/tmp/result.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM users WHERE 1 

http://ariejan.net/2008/11/27/export-csv-directly-from-mysql/

+0

могли бы вы подытожив, что для меня, синтаксис и как он работает. thanks – magicianiam

+0

Он экспортирует выбранные данные в файл с именем result.csv в/tmp/folder (* nix). Блокировка между FIELDS и TERMINATED BY - это конфигурация для форматирования вашего CSV-файла. Подробнее об этом читайте в http://dev.mysql.com/doc/refman/5.1/ru/select-into.html. Я думаю, что нет смысла переписывать его здесь. –

+0

Могу ли я сделать так, чтобы автоматическая загрузка файла? – magicianiam

Смежные вопросы