Jump to content

réduire temps d’exécution d'une requête sql


Recommended Posts

Bonjour a tous
j'ai réussi enfin a comprendre comment récupérer les donnés de la base et l'envoyés vers le fichier tpl.
j'ai 610 produits avec 3 déclinaisons pour chacun (=1830 déclinaisons) avec un module vente flash dont je veux utiliser les résultats de mes requêtes.
Donc pour cela il faut récupérer :
-le nom de la déclinaison et id_attribute (de la table attribute_lang)

public function GetnameCombinaison()
   {         
       return Db::getInstance()->ExecuteS('
       SELECT *
       FROM `'._DB_PREFIX_.'attribute_lang` a_l');
   }


- la quantité,id_product,id_product_attribute et prix (table product_attribute)

public function GetquantityAttributes()
   {         
       return Db::getInstance()->ExecuteS('
       SELECT quantity,id_product,price,id_product_attribute
       FROM `'._DB_PREFIX_.'product_attribute` p_a');
   }


- l' id_attribute et id_product_attribute (table product_attribute_combination)

public function GetattributeCombinaison()
   {         
       return Db::getInstance()->ExecuteS('
       SELECT *
       FROM `'._DB_PREFIX_.'product_attribute_combination` p_ac');
   }


==> c fait a l'aide de ces 3 requêtes mais lorsque je l’exécute ça passe le temps maximum d’exécution (30 sec) et le chargement du site devient lourd>>>donc je veux combiner ,si c possible, les 3 requêtes ensemble et prendre juste les détails des produits concernés par mon module

Link to comment
Share on other sites

je crois que j'ai mal expliqué, alors je récapitule:
j'ai un module ventes flash avec lequel je sélectionne quelques produits pour la ventes flash (une quinzaine de produits) .chaque produit a 3 déclinaisons,la 2me est celle par défaut, si cette dernière est a quantité0 le module passe a la 1ère déclinaisons or moi je veux passer a la 3me pas a la 1ère c pour cela que je veux récupérer les quantités et le noms des déclinaisons a l'aide des requêtes mentionnées au dessus mais ces requêtes me retourne toutes les déclinaisons existantes dans la BDD (+ de 1800) or moi j'ai besoin seulement des déclinaisons qui appartiennent aux produits sélectionnés en ventes flash.
merci d'avance

Link to comment
Share on other sites

je me sens seul sur le forum!!! :long:
bon j'a réussi a faire une requête qui me retourne les données necessaires

public function GetattributeCombinaison()
   {         
       return Db::getInstance()->ExecuteS('
       SELECT pac.*,pa.quantity,pa.id_product,pa.id_product_attribute,pa.price
               FROM `'._DB_PREFIX_.'product_attribute_combination` pac
               LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON pa.`id_product_attribute` = pac.`id_product_attribute`');
    }



mais lors de l’exécution elle me sélectionne toutes les déclinaisons existantes (+de 1830) dans la table en + de l'augmentation du cache ( plus 3M) en chargement de la page.
A l'aide quelqu'un peut m'aider a corriger cette requête pour quelle me sélectionne juste les déclinaisons nécessaires pour mes produits sélectionnés pour la vente flash
Merci d'avance

Link to comment
Share on other sites

Bonjour,

pourquoi ne pas passer l'id_product en paramètre de fonction ?

public function GetattributeCombinaison($idProduct)
   {         
       if(!$idProduct)
               return false;
       else
               return Db::getInstance()->ExecuteS('
               SELECT pac.*,pa.quantity,pa.id_product,pa.id_product_attribute,pa.price
                       FROM `'._DB_PREFIX_.'product_attribute_combination` pac
                       LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa 
                       ON pa.`id_product_attribute` = pac.`id_product_attribute`
                       WHERE pa.id_product='.$idProduct);
    } 



puis on appelle la fonction :

$this->GetattributeCombinaison(MonIdProduct);

Link to comment
Share on other sites

oui j'ai pensé a ça mais ça m'affiche une notice Notice: Undefined variable: idProduct et tableau vide.
en tous cas j'ai résolu mon problème avec cette requête

SELECT id_produit, product_attribute.id_product, product_attribute.id_product_attribute, product_attribute_combination.id_attribute, product_attribute_combination.id_product_attribute, product_attribute.quantity
           FROM ventes, product_attribute, product_attribute_combination
           WHERE id_produit = product_attribute.id_product
           AND product_attribute.id_product_attribute = product_attribute_combination.id_product_attribute
           AND product_attribute_combination.id_attribute <>31
           LIMIT 0 , 30



Il me retourne juste les produits sélectionnées par le module
Merci quand même BVince pour le coup de main

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...