Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальный апдейт MySQL-базы в 5 Мб, нужно оптимальное решение 
V
    Опции темы
Wolf1994
Дата 25.7.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Пожалуйста, помогите найти оптимальное решение.

Есть MySQL-база, 3 тысячи полей. Требуется в каждом поле проапдейтить ячейку "dir". Сейчас эта ячейка содержит: "rus/dir1/dir2...". Надо заменить "rus" на "all", сохранив остальную часть записи. То есть, чтобы, например, вместо "rus/dir1/dir2" было "all/dir1/dir2".

У меня получилось так:
Код

 $sql="SELECT COUNT(id) AS 'c' FROM $table_name";
 $result=mysql_query ($sql, $connection) or die(mysql_error());
 $count=mysql_fetch_array ($result, MYSQL_ASSOC);
 $c=$count['c'];

 $howmuch=10;

 $q++;
 $sql="SELECT dir, id FROM $table_name ORDER BY id ASC LIMIT ".( ($q-1)*$howmuch ).",".($q*$howmuch);
 $result = mysql_query ($sql, $connection) or die(mysql_error());
 while ($row=mysql_fetch_array ($result, MYSQL_ASSOC))
  $temp [$row['id']]=$row['dir'];

 foreach ($temp as $k=>$v)
 {
  $v="all".substr ($v, 3);
  $sql="UPDATE $table_name SET dir='".$v."' WHERE id='".$k."'";
  $result=mysql_query ($sql, $connection) or die(mysql_error());
 }

 print 'Оки. Обработано: '.( ($q-1)*$howmuch )." - ".($q*$howmuch).' Стадия: '.$q.' из '.( floor ($c/$howmuch)+1 )."<br />";
 if ($q<floor ($c/$howmuch)+1)
 {
  print '<script type="text/javascript">'."\n";
  print "//<![CDATA[\n";
  print 'location.href="'.$_PHP['SELF'].'?q='.$q.'";'."\n";
  print "//]]>\n";
  print '</script>'."\n";
 }
 else
  print 'Усё готово!!!';


Скрипт апдейтит по 10 записей и снова вызывает себя.

Можно ли подобную операцию совершить проще и быстрее  smile  
PM MAIL WWW   Вверх
-=Ustas=-
Дата 25.7.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Цитата(Wolf1994 @  25.7.2006,  18:31 Найти цитируемый пост)
Можно ли подобную операцию совершить проще и быстрее  

Зачем такие заморочки с вызовом себя самого? Я бы просто написал его в консольном варианте и без разбиения. Он бы это выполнил быстрее. 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Wolf1994
Дата 25.7.2006, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



В смысле - в консольном варианте?

Без разбиения у меня не получилось - превышается "maximum execution time limit" в 30 секунд. У себя на компьютере я его могу обойти, но не на сервере сайта. 
PM MAIL WWW   Вверх
-=Ustas=-
Дата 26.7.2006, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Цитата(Wolf1994 @  25.7.2006,  22:54 Найти цитируемый пост)
превышается "maximum execution time limit" в 30 секунд

Делаешь на каждой итерации 
Код

set_time_limit(60) ;

и все! 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
SamDark
Дата 26.7.2006, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 2
Всего: 38



UPDATE table SET dir=replace(dir, 'rus/', 'all/') 


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
-=Ustas=-
Дата 26.7.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Цитата(Wolf1994 @  25.7.2006,  22:54 Найти цитируемый пост)
В смысле - в консольном варианте?

Если объемы работы большие, то может сам апач вывалиться, поэтому лучше для таких работ из под консоли делать.

Добавлено @ 09:26 
Цитата(SamDark @  26.7.2006,  08:58 Найти цитируемый пост)
UPDATE table SET dir=replace(dir, 'rus/', 'all/') 

Тоже как вариант... 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Wolf1994
Дата 26.7.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



SamDark, спасибо! Это именно то, что нужно! С меня "+".
Цитата

set_time_limit(60) ;

То есть я своим скриптом могу установить максимальное время его выполнения?!. 
...Ага, посмотрел:
Цитата

set_time_limit() has no effect when PHP is running in безопасный режим.

Мне это не подходит smile
Цитата

Если объемы работы большие, то может сам апач вывалиться, поэтому лучше для таких работ из под консоли делать.

Имеется ввиду, как админ хостинга? Или рядовой пользователь? 
PM MAIL WWW   Вверх
-=Ustas=-
Дата 26.7.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Цитата(Wolf1994 @  26.7.2006,  15:37 Найти цитируемый пост)
Имеется ввиду, как админ хостинга? Или рядовой пользователь? 

Ну это конечно если есть права на выполнение из-под шела smile 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.