Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Почему останавливается скрипт?, читает только часть файла csv
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 21 день
Карма: 0




у меня скрипт отрабатывает несколько часов)
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 21 день
Карма: 0




и еще.. лимит по времени на открытое соединение задается в параметрах сервера? если да, то где?
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Ты для ввода КАЖДОЙ строки делаешь запрос к БД, а потом решаешь, надо ли делать INSERT или UPDATE? Это верный способ убить сервер smile.gif

1. Забудь всё, что ты сделал в этом скрипте.
2. Прочитай про опцию ON DUPLICATE KEY UPDATE, которая имеется в Мускуле для INSERT'а.
3. Прочитай про LOAD DATA INFILE, загрузку данных прямо из файла в таблицу.
4. Переделай скрипт с активным использованием этих возможностей.

Я думаю, что если ты используешь эти фичи, то твои данные начнут заливаться за очень короткое время.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 21 день
Карма: 0




спасибо. попробую.
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩     Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 21 день
Карма: 0




а как данную проверку изменить:

$sql0="SELECT * FROM `balans` WHERE `period`='$newperiod' AND `idn`='$data[2]'";
$res0=mysql_query($sql0);
if(!$res0||mysql_num_rows($res0)<1){$import1="INSERT INTO `balans`(`idn`, `period`, `start_saldo`, `earn_m`, `earn_r`, `pay`, `finish_saldo`) VALUES ('$data[2]', '$newperiod', '$data[5]', '$data[7]', '$data[6]', '$data[8]', '$data[9]')";$res_import1=mysql_query($import1);}
else{
$i1=mysql_fetch_assoc($res0);
if($i1['start_saldo']!=$data[5]||$i1['earn_m']!=$data[7]||$i1['earn_r']!=$data[6]||$i1['pay']!=$data[8]||$i1['finish_saldo']!=$data[9]){
$import1="UPDATE `balans` SET `start_saldo` = '$data[5]', `earn_m` = '$data[7]', `earn_r` = '$data[6]', `pay` = '$data[8]', `finish_saldo` = '$data[9]' WHERE `idn` ='$data[2]' AND `period`='$newperiod';"
}


здесь нужно проверить если совпадает пользователь и дата тогда update, а если нет тогда insert
это при том, что уникальным могу сделать только поле period..

как это сделать?
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩     Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 21 день
Карма: 0




и еще, т.е получается сначала записать дамп в sql файл на сервере, а потом через LOAD DATA LOCAL INFILE забросить?

а как указать в скрипте путь до файла?
т.е. к примеру dump.sql будет находиться в одной директории со скриптом.
указать просто dump.sql
$result = mysql_query("LOAD DATA LOCAL INFILE 'dump.sql' INTO TABLE 'zoznam' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'");


или нужен DocumentRoot?

$result = mysql_query("LOAD DATA LOCAL INFILE '/hsphere/local/home/site.ru/dump.sql' INTO TABLE 'zoznam' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'");


Как правильно?
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 26 дней
Карма: 599




Strannik
INSERT делай по 50-100 записей за 1 раз.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 21 день
Карма: 0




inpost
в этом же и проблема, мне сначала нужно проверить, если есть строка со значениями `period`='$newperiod' AND `idn`='$data[2]', тогда делаем insert, иначе update, а теперь представь если обрабатывать весь код по 50-100 записей, не будет ли это лишней нагрузкой?

P.S.: да и к тому же я не знаю как внутри while (($data = fgetcsv($handle, 1000000, ";")) !== FALSE){} пустить обработчик чтобы он запускал импорт по 50 записей. теоретически конечно можно сделать запись в файл, после 50 записи запускать считывание файла и импорт всех строк из него, но мне кажется это очень напряжно будет...
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 26 дней
Карма: 599




INSERT ON DUPLICATE UPDATE - это используй в таком случае smile.gif
Или даже сам факт того, что после SELECT ты узнаешь, что такой записи нет - то это хороший повод поместить INSERT в общий пакет, чтобы потом пакетом заливать.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Цитата (Strannik @ 15.08.2012 - 17:36)
и еще, т.е получается сначала записать дамп в sql файл на сервере, а потом через LOAD DATA LOCAL INFILE забросить?

Не в SQL файл, а в обычный текстовый. Найди примеры, как это делается!!! В и-нете их много. Впрочем, нормального хэлп достаточно.

Цитата (Strannik @ 15.08.2012 - 17:36)

а как указать в скрипте путь до файла?

Пусть к файлу отсчитывается с точки зрения файловой системы компьютера, а не относительно сайта! Как именно - читай хэлп, там разные варианты возможно.

Цитата (Strannik @ 15.08.2012 - 18:01)
в этом же и проблема, мне сначала нужно проверить, если есть строка со значениями

...ON DUPLICATE KEY UPDATE... именно это и делает, без лишних (ненужных) телодвижений с твоей стороны. Ты уж прочитай сам про эту конструкцию, что ли smile.gif
Правда, эта хрень работает с обычным апдейтом, а не с массовой загрузкой.
Впрочем, можно сделать триггеры, которые при массированной загрузке LOAD DATA INFILE будут работать не хуже, чем ON DUPLICATE KEY с индивидуальными инсертами. Та же проверка получится на существование данных, но она будет делаться внутри Мускуля, не надо будет в ПХП ничего лишнего писать.

И не надо ничего дробить по 50-100 записей... Сколько есть данных, столько и заливай. Только настрой правильно ключи (индексы). И будет тебе счастье!


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса