[1.6.1.0]+ Too many tables, MySQL can only use 61 tables in a join - Backoffice, créer/éditer un produit (SpecificPriceRule.php)


  • administrators

    Lorsque vous avez plus de 59 catégories dans une condition de règle catalogue, PrestaShop crash lors de l'enregistrement produit. Le problème peut survenir avec moins de règles catégories, si vos règles utilisent d'autres conditions (features, attributes, suppliers, manufacturers,

    Le code en cause réside dans classes/SpecificPriceRule.php fonction SpecificPriceRule::getAffectedProducts()

    } elseif ($condition['type'] == 'category') {
       $query->leftJoin('category_product', 'cp'.(int)$id_condition, 'p.`id_product` = cp'.(int)$id_condition.'.`id_product`')
         ->where('cp'.(int)$id_condition.'.id_category = '.(int)$condition['value']);
    } elseif ($condition['type'] == 'supplier') {
    

    Vous devez remplacer cette section par:

                        } elseif ($condition['type'] == 'category') {
                            if ($once) {
                                $query->innerJoin('specific_price_rule_condition_group', 'sprg', 'sprg.id_specific_price_rule='.(int)$this->id);
                                $query->innerJoin('specific_price_rule_condition','sprc', 'sprc.type = "category" and sprc.id_specific_price_rule_condition_group = sprg.id_specific_price_rule_condition_group');
                                $query->innerJoin('category_product', 'cp', 'p.`id_product` = cp.`id_product` and cp.id_category = sprc.value');
                                $once = false;
                            }
                        } elseif ($condition['type'] == 'supplier') {
    

    Ajoutez ensuite la ligne $once = true; juste avant le foreach:

                    // Add the conditions
                    $once = true;
                    foreach ($condition_group as $id_condition => $condition) {
    

    Enfin créez un index dans votre schéma (sql):

    ALTER TABLE `ps_specific_price_rule_condition`
    ADD INDEX `id_specific_price_rule_condition_group_type` (`id_specific_price_rule_condition_group`, `type`);
    

    Ce bug est également lié à celui-ci: https://aide.prestashop.click/topic/1071/1-6-1-0-duplicate-entry-xxxxxx-for-key-id_product_2-insert-into-ps_specific_price-backoffice-créer-éditer-un-produit-specificpricerule-php


Se connecter pour répondre
 

Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons.