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 :

Encore un problème de requête


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 7
    Par défaut Encore un problème de requête
    Bonjour
    Je veux creer un système de gestion de facturation
    J'ai 3 tableS
    c_facture avec ID,NOM,ADRESSE
    c_actes facture avec ID,ID_FACTURE,MONTANT_ACTES listant tous les actes et leur montant (comme des articles par ex)
    c_regl_factures avec ID,ID_FACTURE,MONTANT,TYPE_REGL listant tous les reglement et mode de reglement

    Je veux dans une requête recuperer la somme du montant des actes(articles) et des reglements

    Je me retrouve avec des valeurs fausses souvent le double de la valeur attendue

    J'ai du mal a comprendre

    Grand merci

    Ci dessous ma requête


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  A.ID_FACTURE,
    SUM(A.MONTANT_ACTE) AS T ,
    SUM(R.MONTANT) AS TR ,
    F.NOM
     
     
    FROM c_factures AS F
    JOIN `c_actes_factures` AS A   ON F.ID = A.ID_FACTURE
    JOIN c_regl_factures AS R ON F.ID =R.ID_FACTURE

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Par défaut
    Déjà, il manque la clause GROUP BY dans cette requête (qui aurait rejetée par tout autre SGBD que MySQL).

    Ensuite, lorsqu'on rencontre un problème de regroupement, la meilleure manière de comprendre d'où vient l'erreur est d'analyser le détail des lignes qui composent les cumuls (en ôtant les regroupements)... pour y découvrir dans la majorité des cas un produit cartésien.
    Pour corriger cela, il suffit de déplacer l'un des regroupements dans la clause FROM sous la forme d'une table dérivée.
    Code : 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
    17
    18
    19
    select  F.ID_FACTURE
        ,   sum(A.MONTANT_ACTE) as T
        ,   R. TR
        ,   F.NOM
    from    C_FACTURES  as F
        inner join
            C_ACTES_FACTURES    as A
            on  F.ID = A.ID_FACTURE
        inner join
            (   select  ID_FACTURE
                    ,   sum(MONTANT)    as TR
                from    C_REGL_FACTURES
                group by ID_FACTURE
            )   as  R
            on  F.ID = R.ID_FACTURE
    group by F.ID_FACTURE
        ,   F.NOM
        ,   R. TR
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 7
    Par défaut Cela marche à 99%
    Merci pour votre retrour
    Cela marche presque correctement
    Petit bug encore
    Dans le cas ou il n'y a pas de reglement, c'est à dire pas de ID_Facture correspondant dans la table c_regl_facture
    La requête ne visualise pas l'enregistrement correspondant (celui qui n'a pas de reglement)
    Grand merci à vous, j'ai bien avancé.
    Bien cordialement

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Par défaut
    C'est là que la jointure externe est nécessaire...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 7
    Par défaut Demande d'info
    Merci pour votre retour
    quel élément de code dois je alors ajouter à ma requete pour visualiser les factures qu'on non pas de règlement ?
    Grand merci à vous
    Bien cordialement

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Encore un problème avec une requête MYSQL en C#
    Par encoremoi21258 dans le forum C#
    Réponses: 3
    Dernier message: 08/03/2014, 21h53
  2. [MySQL] Encore un problème de requête MySQL
    Par anakyl dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/10/2008, 10h15
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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