Здравствуйте!!
Задача в следующем: нужно наладить импорт данных из .xlsx в базу.
В файле .xlsx около 130 000 строк. Скрипт написан и импорт на локалке через командную строку успешно происходит. В цикле вытягивается поочередно каждая строка из екселя и апдейтится строка в базе. Но когда запускаю тот же скрипт на хостинге через ssh, импорт валит сервер где-то на 30 000 строке.
Добавлено:
Возможно проблема в запросе. Может оптимизировать как-нибудь множественный UPDATE?
Подскажите чем можно в этой ситуации помочь. Также привожу скрипт на всякий случай:
PHP:
скопировать код в буфер обмена
$xlrows = $sheet->sheetData->row; $i=0; foreach ($xlrows as $xlrow) { // In each row, grab it's value foreach ($xlrow->c as $cell) { $v = (string) $cell->v; // If it has a "t" (type?) of "s" (string?), use the value to look up string value if (isset($cell['t']) && $cell['t'] == 's') { $si = $strings->si[(int) $v]; // Register & alias the default namespace or you'll get empty results in the xpath query $si->registerXPathNamespace('n', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); // Cat together all of the 't' (text?) node values foreach($si->xpath('.//n:t') as $t) { $s[] = (string) $t; } } $arr[] = $v; } // Assuming the first row are headers, stick them in the headers array if (count($headers) == 0 ) { $headers = $arr; } else { // Combine the row with the headers - make sure we have the same column count if($row['KOL1'] > 0) $status = 1; else if($row['KOL2'] > 0 || $row['KOL3'] > 0 || $row['KOL4'] > 0) $status = 2; else $status = 0; $mysql_query = "UPDATE `ARTICLES` JOIN `ART_LOOKUP` ON `ART_ID` = `ARL_ART_ID` SET `price` = " . $row['CENA'] .", `status` = " . $status . ", `article` = ARL_DISPLAY_NR WHERE `ARL_SEARCH_NUMBER` = '" . $article . "'"; }else{ echo 'inserted' . $i . ' '; if($i==30000 ) exit; } $i++; } }
(Отредактировано автором: 28 Ноября, 2013 - 17:07:06)
|