Не могу понять что и как сделать. необходимо обновить значения одной таблице по условию (название столбца) условие и значение получаю с другой таблице или при чтении xml файла. помогите пожалуйста 5 день ломаю голову и циклами и массивами 504 и все Код (Text): $xml = simplexml_load_file("1.xml"); $num=0; foreach($xml->ПакетПредложений->Предложения->Предложение as $item){ $var = $item->Количество; $var2 = $item->Артикул; $query ="UPDATE items SET rest = '".$var."' WHERE field_217 = '".$var2."'"; $result = mysqli_query($link, $query) or die("Ошибка 2" . mysqli_error($link)); } mysqli_close($link); На этом я остановился...
@frixer, возьми за правило. Если ты делаешь запрос в цикле - ты делаешь неправильно. 1 MySQL позволяет произвести загрузку из CSV файла одной командой. Погугли. 2 Если это временная таблица никто не запрещает грузить в оперативную память (если конечно позволяет объём) где ей самое место. Погугли. 3 Никто не запрещает использовать JOIN в команде UPDATE и обновлять таблицы в зависимости от их значений. Погугли.
использование XML нужно законодательно запретить а вообще, если сервак захлебывается из-за размера файла с xml то можно - попытаться использовать вместо simplexml какие-то менее прожорливые аналоги - читать из файла построчно и разбирать его руками - перевести XML сначала целиком в БД, а уже потом просто работать с двумя БД (я бы наверное попытался сделать именно так) в общем, много чего можно придумать при нехватке памяти )
да с xml проблемы залит в БД нет, все отрабатывает на ура, во временную таблицу. но потом получается надо взять одно значение из одной таблицы зайти в другую посмотреть есть ли там такой артикул если есть заменить rest, потом берем второй третий и так 15000 строк --- Добавлено --- и вот тут у меня ступор, либо забираеть опять все в массив либо циклично брать проверять брать проверять
Что то не то, вообщем пробовал с левт и просто Код (Text): UPDATE items, ta SET items.rest = ta.ostatok WHERE items.custom_7 = ta.articul 504 вылетает max_execution_time= 600 пробовал и 3000 ставить бесполезно подскажите как поступить еще
Говоря честно - я читаю читаю и никак не могу ухватить суть проблемы (ну я не оч сообразительный насчет БД, да)))) 1. Трансформировали XML в SQL-базу - так? Успешно? Ок. 2. "надо взять одно значение из одной таблицы" - тоже не проблема, как я понимаю, да? 3. "зайти в другую посмотреть есть ли там такой артикул" - это тоже возможно? 4. "если есть заменить rest" - это можно да? 5. "потом берем второй третий и так 15000 строк" - и это? Ну? "либо циклично брать проверять брать проверять" - а почему бы и нет? Если столько мороки - ну сделай скрипт который сделает 15000 итераций, да и всё. Кстати, такие вещи вообще лучше делать из PHP-CLI. А то из сабжа вообще ничего непонятно, ни среда исполнения, нихрена))))))))
1. да успех 2. -3 -4 5 это я так предполагаю один запрос делать должен но он висит. циклично можно пример типа цикла for не понимаю.... ааааа, может глубоко сам копаю а все как обычно на поверхности.... суть такова что есть две таблицы в одной БД, нужно поочередно взять первое значение во второй таблице, по артикулу найти эту строку в первой таблице, и заменить поле rest в первой таблице значением из второй, и так все строки.
Есть такая вещь как триггеры. Может вам поможет? Так как обновление будет происходить параллельно изменениям в первой таблице. Не 15 тыщ одновременно. И php вообще не нужен... Запустил триггер и все...
За такие советы надо гнать с форума пинками... Код (Text): UPDATE items LEFT JOIN ta ON items.custom_7 = ta.articul SET items.rest = ta.ostatok
Это уже из раздела Digging Deeper --- Добавлено --- ...товарищи, зарядка окончена, переходим к хранимым процедурам... ))