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

Requêtes MySQL Discussion :

Optimiser des requetes


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut Optimiser des requetes
    Bonjour,

    J'ai une table des commandes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_commande, client, date
    J'ai une table des reglements des commandes

    Une commande pouvant avoir plusieurs règlements et un règlement pouvant payer plusieurs commande, j'ai une table permettant de lier les tables commandes et règlement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_commande, id_reglement
    Je veux connaître le nombre de commandes réglées par date de commande, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT date, COUNT(*)
    FROM commandes
    WHERE id_commande IN
    (SELECT DISTINCT id_commande
    FROM commandes_liens_reglements)
    GROUP BY date
    Je veux connaître le total réglé par date de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT date, SUM(montant)
    FROM commandes
    LEFT OUTER JOIN 
    (SELECT id_commande, SUM(montant) AS montant
    FROM commandes_liens_reglements
    LEFT OUTER JOIN reglements USING(id_commande)
    GROUP BY id_commande)
    AS commandes_liens_reglements USING(id_commande)
    GROUP BY date
    Peut-on optimiser ces requetes.

    Merci d'avance.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Pour la première requête, il est souvent préférable de remplacer une sous-requête avec un IN par un INNER JOIN. Par contre, il faut alors ruser pour ne pas compter plusieurs fois la même commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT date, COUNT(DISTINCT id_commande)
    FROM commandes
    INNER JOIN commandes_liens_reglements USING (id_commande)
    GROUP BY date
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    Bonjour,

    Comme il est utilsé une table nn entre la table commande et la table reglement, je préconiserai le mettre le montant dans cette table.
    Ceci permettra de savoir pour un reglement, quels sont les montants affectés à chaque commande et aussi de déterminer la date des commandes liés aux réglements

    Table des commandes :
    id_commande, client, date

    Table des réglements :
    id_reglement

    Table commandes_liens_reglements
    id_commande, id_reglement, montant.

    Ta deuxième requete devrait donner ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DATE, SUM(MONTANT) FROM reglements
    INNER JOIN commandes_liens_reglements using(id_reglement)
    inner join commandes using (id_commande)
    group by date

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    La question que je me pose, du coup, c'est à quoi servira la table règlements ?
    Si elle n'a plus qu'un attribut, son identifiant, le chat est maigre.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    A y mettre ses propres information comme la date du reglement et qui a reglé.

    A toi de voir mais je pense qu'il y aura à terme des informations dans cette table.

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Tu as raison, mode de règlement ou autres.
    Bien vu.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimisation des Requete Tsql a l'aide des index
    Par AzizMaroc dans le forum Développement
    Réponses: 2
    Dernier message: 13/03/2009, 11h42
  2. Ajax & Optimisation des requetes HTTP
    Par Spir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/09/2008, 11h27
  3. Optimisation des requetes SQL
    Par elharet dans le forum SQL
    Réponses: 3
    Dernier message: 14/11/2007, 21h26
  4. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09
  5. Optimisation des requetes
    Par bifidus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/10/2003, 11h29

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