Место для вас

Экспорт данных из MySql в CSV файл

Однажды передо мною возникла задача быстро перенести интернет-магазин на движок joomla (virtuemart). Необходимо было реализовать импорт/экспорт таблиц между разными структурами таблиц. В качестве формата обмена данными я решил использовать CSV формат. Удобно и просто.

Ниже приведен общий код ЭКСПОРТА данных из MySql в csv файл. Я не стал указывать экспорт конкретно под virtuemart, так как там есть свои нюансы и все зависит от первоначальной таблицы данных.


<?php
// подключение к базе данных
include("db.php");

$csv_file = ''; // создаем переменную, в которую записываем строки

$query = "SELECT field1, field2, field3, field4 FROM table";
$result = mysql_query($query);
if ($result)
{
   while ($row = mysql_fetch_assoc($result))
   {
      $csv_file .= '"'.$row["field1"].'","'.$row["field2"].'","'.$row["field3"].'","'.$row["field4"].'"'."\r\n";
      // в качестве начала и конца полей я указал " (двойные кавычки)
      // в качестве разделителей полей я указал , (запятая)
      // \r\n - это перенос строки
   }
}

$file_name = 'export.csv'; // название файла
$file = fopen($file_name,"w"); // открываем файл для записи, если его нет, то создаем его в текущей папке, где расположен скрипт
fwrite($file,trim($csv_file)); // записываем в файл строки
fclose($file); // закрываем файл

// задаем заголовки. то есть задаем всплывающее окошко, которое позволяет нам сохранить файл.
header('Content-type: application/csv'); // указываем, что это csv документ
header("Content-Disposition: inline; filename=".$file_name); // указываем файл, с которым будем работать
readfile($file_name); // считываем файл
unlink($file_name); // удаляем файл. то есть когда вы сохраните файл на локальном компе, то после он удалится с сервера
?>

Вот и все. Как видно все легко и просто. Из базы данных мы выбираем только те столбцы, которые нужны и экcпортируем в CSV информацию от туда. Обратный процесс, то есть импорт данных из CSV файла в MySQL можно посмотреть тут.


Место для вас

Коментарии

добавить коментарий

  1. Никитушка - 24 ноября, 2016 в 10:02:01

    Скажите, а если в базе ~1 млн записей приходится экспортировать, что делать?

    Все время ругается на нехватку памяти.

    • adminer - 24 ноября, 2016 в 10:02:05

      Никитушка, тут нужно проббовать. так на вскидку:


      1. тут либо увеличить память ini_set("memory_limit","999M");

      2. дибо использовать SplFileObject


          protected function parceStockCsvFile($file)
          {
              $filename = pathinfo($file, "path/to/file.csv");

              $file = new SplFileObject($file, 'r');
              $file->setFlags(SplFileObject::READ_CSV);
              $file->setCsvControl(',', "\"");

              if($file->valid())
              {
                  $r = 0;

                  foreach ($file as $row)
                  {
                      $r++;
                         if(($r == 1)) {continue;} // skip headers

                      $this->db->query("UPDATE table SET field = '".$row[1]."'");
                  }

                  return $r.' products was updated';
              }

              return FALSE;
          }

  2. Валерий - 12 декабря, 2016 в 05:57:42

    Попробовал - отлично! Спасибо огромное! Избавили от рутинных операций через phpmyadmin.

  3. Владимир - 12 декабря, 2016 в 05:57:47

    А как прикрутить кнопку, чтобы при нажатии на нее запускался экспорт?

    • админер - 27 апреля, 2017 в 08:51:04

      Владимир, сделайте кнопку, которая будет смотреть на файл, который генерирует csv.



      <a href="site.ru/exportcsv.php"></a>


  4. Саня - 21 июля, 2017 в 08:19:56

    А можете написать подобный скрипт?

    Есть в базе таблица, в которой больше 1.000.000 строк

    Указываем имена файлов (поле)

    Указываем какое кол-во строк нам небходимо в диапазоне от и до

    В итоге получаем список файлов с их именами и нужным кол-вом строк. Строки должны быть рандомные из таблицы. Файлы примерно буду иметь по 150-200к рандомных строк

    Не бесплатно

    • adminer - 21 июля, 2017 в 08:19:59

      Саня, можно сделать. обсудим по почте.

Добавить коментарий

кликните на картинку,
чтоб обновить код

Что за сайт

Этот сайт представляет унифицированную базу, где инфа собрана в единое целое, а не разбросанна по многочисленным сайтам, записям на листах бумаги или головам людей; а так же доступна круглосуточно не зависимо от кого-либо или чего-либо.

Будь в курсе

Интересненько

Вверх