Celsi Posted October 26, 2023 Share Posted October 26, 2023 Ahoj prestashopáci, nevěděl by někdo jak hromadně poslat příkat SQL abych ovlivnil skladovou zásobu všech produktů (včetně variant) co mají společný kód (refference)? Jediný co umím je pro daný produkt: UPDATE `ps_stock_available` SET `quantity` = '55' WHERE `ps_stock_available`.`id_stock_available` = 20118; Ale jak docílit toho že by se projela celá databáza a když bude mít produkt například kód ve variantě ABC123, skladová zásoba 10 tak se tato hodnota propíše do všech produktů. Ať už to bude produkt bez variant nebo s variantou. Lze to nějak? Link to comment Share on other sites More sharing options...
ps8modules Posted October 28, 2023 Share Posted October 28, 2023 (edited) Ahoj. Takto je to špatné. Rozumnější je napsat PHP script. V tabulce ps_stock_available se u produktu s kombinacemi zapisuje hodnota pro danou kombinaci a poté součet všech kombinací. Script by použil dostupné PrestaShop funkce a bylo by vystaráno. Ukázka: <?php header("Access-Control-Allow-Origin: *"); include('../config/config.inc.php'); include('../init.php'); $context = Context::getContext(); $db = Db::getInstance(); $findReference = 'ABC123'; $newQty = '10'; $getProducts = $db->executeS("SELECT id_product FROM "._DB_PREFIX_."product WHERE reference LIKE '%".$findReference."%'"); $getProductsAttribute = $db->executeS("SELECT id_product, id_product_attribute FROM "._DB_PREFIX_."product_attribute WHERE reference LIKE '%".$findReference."%'"); if ($getProducts) { foreach ($getProducts as $p) { $hasAttributes = $db->getValue('SELECT COUNT(id_product_attribute) as $cnt FROM '._DB_PREFIX_.'product_attribute WHERE id_product = '.$p['id_product']); if ($hasAttributes > 0) { // existují atributy pro produkt s referencí $findReference, měl by se počet rozdělit mezi všechny kombinace ? /* upravit dle potřeby, například dělit počet $getQty = ($newQty / $hasAttributes); if (is_float($getQty)) { $quantity = floor($getQty); $rest = ($newQty - ($quantity * $hasAttributes)); // zbytek po dělení, to znamená, že musíme jednomu atributu přičíst zbytek } else { $quantity = $qty; $rest = 0; } $getAllAttributes = $db->executeS('SELECT id_product_attribute FROM '._DB_PREFIX_.'product_attribute WHERE id_product = '.$p['id_product']); $i = 0; foreach ($getAllAttributes as $ga) { $i++; if ($rest > 0) { if ($i == '1') { StockAvailable::updateQuantity($p['id_product'], $ga['id_product_attribute'], ($quantity + $rest)); } else { StockAvailable::updateQuantity($p['id_product'], $ga['id_product_attribute'], $quantity); } } } */ } else { StockAvailable::updateQuantity($p['id_product'], '0', $newQty); } } } if ($getProductsAttribute) { foreach ($getProductsAttribute as $pa) { StockAvailable::updateQuantity($pa['id_product'], $pa['id_product_attribute'], $newQty); } } Edited October 28, 2023 by ps8moduly.cz (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now