IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation de requête


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Par défaut Optimisation de requête
    Bonjour à tous,

    Voilà j'ai deux tables :

    Une Stock (produit et quantité) :
    produit 1;10
    produit 1; 15
    Produit 2; 12

    Une Commande :
    produit 1;5
    produit 2; 2
    Produit 2; 10

    Actuellement j'ai une boucle qui me liste les produits et je fais deux requetes dans celle-ci afin de calculer le total stock et le total commande pour chaque produit :

    Ca ressemble à ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $retour_achat = mysql_query("SELECT SUM(ca_qte) as somme_achat FROM log_commande_achat WHERE log_commande_achat.ca_prod='".$donnees_prod['article']."' GROUP BY ca_prod");

    J'ai la requête similaire pour la table des stocks.

    Je me demandai si je ne pouvais pas regrouper ses requêtes afin de n'en faire qu'une ?
    Cela optimiserait-il les temps de traitement ?
    Si oui comment faire car j'ai d"jà fait cela et ça ne marche point...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $retour_stock = mysql_query("SELECT SUM(log_stock.quantite) AS somme_stock, SUM(log_commande_achat.ca_qte) as somme_achat FROM log_stock LEFT JOIN log_commande_achat ON log_commande_achat.ca_prod=log_stock.article WHERE log_stock.article='".$donnees_prod['article']."'
     GROUP BY log_stock.article, log_commande_achat.ca_prod");
    $donnees_stock = mysql_fetch_array($retour_stock);

    Ca me renvoi des mauvais chiffres...

    Merci d'avance de votre aide !

  2. #2
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Essaye comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT  SUM(log_stock.quantite) AS somme_stock,
     SUM(log_commande_achat.ca_qte) AS somme_achat FROM log_stock
     JOIN log_commande_achat ON log_stock.article=log_commande_achat.ca_prod
     WHERE log_stock.article='".$donnees_prod['article']."'
     GROUP BY log_stock.article, log_commande_achat.ca_prod

    Meme comme ca , ca sera plus rapide que d'executer deux requetes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT  SUM(log_stock.quantite) AS somme_stock,
     SUM(log_commande_achat.ca_qte) AS somme_achat FROM log_stock, log_commande_achat 
    WHERE log_stock.article=log_commande_achat.ca_prod
    AND log_stock.article='".$donnees_prod['article']."'
     GROUP BY log_stock.article, log_commande_achat.ca_prod

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Par défaut
    Merci, mais c'est pas encore ça, j'ai donc fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $retour_prod = mysql_query("	SELECT log_stock.article, log_stock.code_simpl, SUM(log_stock.quantite) AS somme_stock, SUM(log_commande_achat.ca_qte) AS somme_achat
    											FROM log_stock 
    											 JOIN log_commande_achat ON log_stock.article=log_commande_achat.ca_prod
    											WHERE log_stock.groupe_stat='".$donnees_groupe_stat['num_stat']."' 
    											GROUP BY log_stock.article, log_commande_achat.ca_prod
    											ORDER BY log_stock.code_simpl");
    Le problème c'est que cela me sort des chiffres bidons...
    Le problème peut-il venir du fait que dans chacune de mes tables il y a plusieurs lignes pour un même produit ?

    Merci d'avance de votre aide !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Par défaut
    essaye ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    select 
    commande.id,
    stock.id,
    commande.somme,
    stock.somme
     
    from
     
     
     
     (select sum(quantite) as somme,article as id from log_stock group by article) stock
    left join
    (select sum(ca_qte) as somme ,ca_prod as id from log_commande_achat group by ca_prod) commande
     
     
    on (commande.id = stock.id)

Discussions similaires

  1. [Access] Optimisation performance requête - Index
    Par fdraven dans le forum Access
    Réponses: 11
    Dernier message: 12/08/2005, 14h30
  2. Optimisation de requête avec Tkprof
    Par stingrayjo dans le forum Oracle
    Réponses: 3
    Dernier message: 04/07/2005, 09h50
  3. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55
  4. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo