@interes70

Как быстро добавить большой CSV файл в MySQL?

Добрый день. Не где не могу найти понятного примера использования LOAD DATA INFILE.
Мне нужно добавить файл csv в mysql.
Делаю сейчас так:
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
			{
				for ($c=0; $c < count($data); $c++)
				{
						#разделение строки
						list($c_classid, $c_instanceid, $c_price, $c_offers, $c_popularity, $c_rarity, $c_quality, $c_heroid, $c_slot, $c_stickers, $c_market_name, $c_market_name_en, $c_name_color, $c_price_updated, $c_pop) = explode(";", $data[$c]);
						
						#Создаем запрос
						$sqlGet = "INSERT INTO `csv` (
							c_classid, 
							c_instanceid, 
							c_price, 
							c_offers, 
							c_popularity, 
							c_rarity,
							c_quality,
							c_heroid,
							c_slot,
							c_stickers,
							c_market_name,
							c_market_name_en,
							c_name_color,
							c_price_updated,
							c_pop
						) VALUES (
							'".mysql_real_escape_string($c_classid)."', 
							'".mysql_real_escape_string($c_instanceid)."', 
							'".mysql_real_escape_string($c_price)."', 
							'".mysql_real_escape_string($c_offers)."', 
							'".mysql_real_escape_string($c_popularity)."', 
							'".mysql_real_escape_string($c_rarity)."', 
							'".mysql_real_escape_string(str_replace( "\"", "", $c_quality))."', 
							'".mysql_real_escape_string($c_heroid)."', 
							'".mysql_real_escape_string(str_replace( "\"", "", $c_slot))."', 
							'".mysql_real_escape_string($c_stickers)."', 
							'".mysql_real_escape_string(str_replace( "\"", "", $c_market_name))."', 
							'".mysql_real_escape_string(str_replace( "\"", "", $c_market_name_en))."', 
							'".mysql_real_escape_string($c_name_color)."', 
							'".mysql_real_escape_string($c_price_updated)."', 
							'".mysql_real_escape_string($c_pop)."'
						)";
						
						#заносим в базу
						mysql_query($sqlGet) or die(mysql_error());
						
				}

Данный метод работает , но очень долго.
Подскажите как сделать быстрее?
  • Вопрос задан
  • 456 просмотров
Пригласить эксперта
Ответы на вопрос 1
hOtRush
@hOtRush
Третий параметр в fgetcsv это символ разделителя, непонятно зачем там запятая, а потом ты еще раз делаешь explode(';',,. Если у тебя разделитель ; то сразу его и укажи. Уменьши количество запросов, в одном инсерте может быть сколько угодно строк.

Ну и сложно представить что непонятного в этом запросе)

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы