У меня есть несколько таблиц, которые я хотел бы экспортировать все данные таблицы в один файл 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?