Импортировать CSV-файл непосредственно в MySQL

Я хочу импортировать файл csv в mysql .. что-то вроде:

load data local infile 'uniq.csv' into table tblUniq fields terminated by ',' enclosed by '"' lines terminated by '\n' (uniqName, uniqCity, uniqComments) 

http://www.tech-recipes.com/rx/2345/import_csv_file_directly_into_mysql/

но имена столбцов в csv и что в таблице базы данных разные, что мне делать? я хочу сделать это программно ..

Вы можете создать скрипт для анализа вашего файла csv и поместить данные в db.

Что-то вроде:

  $path = "yourfile.csv"; $row = 1; if (($handle = fopen($path, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $row++; $data_entries[] = $data ; } fclose($handle); } // this you'll have to expand foreach($data_entries as $line){ $sql = "INSERT INTO ..." $db->execute($line); } 

но имена столбцов в csv и что в таблице базы данных разные, что мне делать?

Не проблема. Вы можете указать, какой столбец CSV импортируется в какой столбец базы данных.

Синтаксис LOAD DATA INFILE

По умолчанию, если в конце инструкции LOAD DATA INFILE не указан список столбцов, ожидается, что строки ввода будут содержать поле для каждого столбца таблицы. Если вы хотите загрузить только некоторые из столбцов таблицы, укажите список столбцов:

 LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...); 

То, что мне нравится делать, когда я нахожу синтаксис INFILE слишком сложным, – это использовать графический клиент, такой как HeidiSQL, чтобы щелкнуть соответствующий порядок столбцов (он имеет графический предварительный просмотр) и скопировать + вставить сгенерированный SQL-запрос.

Если вы хотите загрузить только первые 7 символов последнего столбца из файла CSV в столбец uniqComments таблицы, вы можете сделать что-то вроде этого …

 load data local infile 'uniq.csv' into table tblUniq fields terminated by ',' enclosed by '"' lines terminated by '\n' (uniqName, uniqCity, @seven_chars) set uniqComments=left(@seven_chars,7) 

Попытайтесь, это отлично работает для меня.

 ini_set('auto_detect_line_endings',TRUE); $csv_data=array(); $file_handle = fopen($_FILES['file_name']['tmp_name'], 'r'); while(($data = fgetcsv($file_handle) ) !== FALSE){ $update_data= array('first'=>$data['0'], 'second'=>$data['1'], 'third'=>$data['2'], 'fourth'=>$data['34']); // save this array in your database } 

Операторы ниже импортируют данные из файла csv в таблицу users.

 LOAD DATA INFILE 'c:/xampp/example.csv' INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; 

Импортировать CSV-файл в MySQL