docvol Posted July 23, 2013 Share Posted July 23, 2013 (edited) Помогите пожалуйста, доделать модуль для массового изменения цен в каталоге. У меня стоит PS 1.3.1 - так уж получилось, магазин работает, пока не меняем. Бьюсь уже который день с модулем massprice -кое что поменял, и в простом разделе каталога уже работает, но там где товары составные с комбинациями - не работает. Вот основной код : // категория в которой меняем цены $skipcategory // nbr - число в процентах, насколько прибавить или убавить ( -nbr) $skipcategory =Configuration::get('MASSPRICE_SKIP_CAT'); mysql_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_) or die(mysql_error()); mysql_query("SET NAMES UTF8");//this is needed for UTF 8 characters - multilanguage mysql_select_db(_DB_NAME_) or die(mysql_error()); //отбираем товары в заданной категории $sorgudc = mysql_query(" SELECT p.* FROM `ps_category_product` p WHERE p.`id_category` IN (".$skipcategory .") GROUP BY p.`id_product`"); @$veridc = mysql_fetch_assoc($sorgudc); // в цикле меняем цену на $nbr % в ps_product.price , где id_product из отобранного do { $sorgudc2 = mysql_query(" SELECT * FROM `"._DB_PREFIX_."product` WHERE `id_product` = ".@$veridc['id_product']." "); @$veridc2 = mysql_fetch_assoc($sorgudc2); { $per=$veridc2['price']*$nbr/100; $price =$veridc2['price']+$per; Db::getInstance()->Execute("UPDATE `"._DB_PREFIX_."product` SET `price` = ".@$price." WHERE `"._DB_PREFIX_."product`.`id_product` = ".@$veridc['id_product'].";"); } } while ($veridc = mysql_fetch_assoc($sorgudc)); Ну и это все работает на версии 1.3.1, а теперь сама проблема - как сделать коррекцию цен на товары с атрибутами из той же выбранной категории Эти товары с атрибутами находятся в таблице `ps_product_attribute` там собственно нам нужны три колонки - `id_product_attribute` `id_product` `price` нужный нам конкретный товар для изменения цены сидит в `id_product` , вот пример как уменя это выглядит - `id_product_attribute` `id_product` `price` 534 3654 150 535 3654 350 536 3654 600 Мне нужно сделать выборку по каждой id_product из `ps_product_attribute` и поменять price но мозгов и опыта не хватает, подскажите как правильно ! пытался делать вот так - do { $sorgudc5 = mysql_query(" SELECT * FROM `ps_product_attribute` WHERE `id_product` = ".@$veridc['id_product']." "); @$veridc5 = mysql_fetch_assoc($sorgudc5); $per=$veridc5['price']*$nbr/100; $price =$veridc5['price']+$per; Db::getInstance()->Execute("UPDATE `"._DB_PREFIX_."product_attribute` SET `price` = ".@$price." WHERE `"._DB_PREFIX_."product_attribute`.`id_product` = ".@$veridc['id_product'].";"); } while ($veridc = mysql_fetch_assoc($sorgudc)); ничего хорошего не получается Edited July 23, 2013 by docvol (see edit history) Link to comment Share on other sites More sharing options...
sors Posted July 23, 2013 Share Posted July 23, 2013 Ужас то какой. Достаточно всего двух запросов для обновления всех цен. UPDATE `ps_product` p, `ps_category_product` cp SET p.price=p.price*'.$mult.' WHERE cp.`id_product`=p.`id_product` AND cp.`id_category`='.(int)$skipcategory UPDATE `ps_product_attribute` pa, `ps_category_product` cp SET pa.price=pa.price*'.$mult.' WHERE cp.`id_product`=pa.`id_product` AND cp.`id_category`='.(int) где множитель вычисляется так $mult=(float)$nbr/100+1; 1 Link to comment Share on other sites More sharing options...
docvol Posted July 24, 2013 Author Share Posted July 24, 2013 Спасибо большое за помощь, действительнно, ужас. Немного поменял синтаксис, чтобы заработало, получилось вот так - $skipcategory =Configuration::get('MASSPRICE_SKIP_CAT'); mysql_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_) or die(mysql_error()); mysql_query("SET NAMES UTF8");//this is needed for UTF 8 characters - multilanguage mysql_select_db(_DB_NAME_) or die(mysql_error()); $mult=(float)$nbr/100+1; Db::getInstance()->Execute("UPDATE `ps_product` p, `ps_category_product` cp SET p.price=p.price*".$mult." WHERE cp.`id_product`=p.`id_product` AND cp.`id_category`=$skipcategory;"); Db::getInstance()->Execute("UPDATE `ps_product_attribute` pa, `ps_category_product` cp SET pa.price=pa.price*".$mult." WHERE cp.`id_product`=pa.`id_product` AND cp.`id_category`=$skipcategory;"); В таком виде меняет цены в выбранной категории правильно, правда, пока упражнялся и менял кавычки и запятые, снес цены во всем каталоге - обнулились везде. Восстановил из дампа базу - вроде бы все ок. Посмотрите, пожалуйста, на мои изменения - может я что то лишнее вписал. Link to comment Share on other sites More sharing options...
sors Posted July 24, 2013 Share Posted July 24, 2013 Все, что начинается с mysql_ лишнее Link to comment Share on other sites More sharing options...
Recommended Posts