Экспорт и импорт нескольких таблиц с помощью CSV и LOAD DATA INFILE - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть несколько таблиц, которые я хотел бы экспортировать все данные таблицы в один файл CSV, а затем импортировать в MySQL с LOAD DATA INFILE. Я успешно экспортировал и импортировал одну таблицу (в данном случае media_table) со следующим кодом:

экспорт:

$result = $conn->query("SELECT * FROM {$table} WHERE playlist_id='$playlist_id'");
$num_fields = mysqli_num_fields($result);

$headers = array(); 
  for ($i = 0; $i < $num_fields; $i++) {
  $headers[] = mysqli_fetch_field_direct($result, $i)->name;
}

$fp = fopen('php://output', 'w');
if ($fp && $result) {
  header('Content-Type: text/csv');
  header('Content-Disposition: attachment; filename="'.$filename.'.csv"');
  header('Pragma: no-cache');
  header('Expires: 0');
  fputcsv($fp, $headers);
  while ($row = $result->fetch_array(MYSQLI_NUM)) {
    fputcsv($fp, array_values($row), '|', '^');
  }
  die;
}

импорт:

$query = <<<eof
  LOAD DATA INFILE '$filename' INTO TABLE {$table}
  FIELDS OPTIONALLY ENCLOSED BY '^'
  TERMINATED BY '|'
  ESCAPED BY ''
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;
eof;

Вот сокращенная версия таблиц (есть больше данных и таблиц, но я надеюсь получить представление о том, как это делается):

$sql = "CREATE TABLE $media_table (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` varchar(50) NOT NULL,
  `title` varchar(255) DEFAULT NULL,
  `playlist_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) $charset_collate;";

$sql = "CREATE TABLE $path_table (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `path` varchar(500) DEFAULT NULL,
  `def` varchar(50) DEFAULT NULL,
  `media_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `media_id` (`media_id`),
  CONSTRAINT `mvp_path_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES {$media_table} (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) $charset_collate;";

$sql = "CREATE TABLE $subtitle_table (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `label` varchar(50) NOT NULL,
  `src` varchar(500) NOT NULL,
  `media_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `media_id` (`media_id`),
  CONSTRAINT `mvp_subtitle_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES {$media_table} (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) $charset_collate;";

Есть ли способ экспортировать несколько таблиц в один CSV?

...