Problème de jointure / group by Mysql

Fermé
mysql_ - 4 oct. 2007 à 16:22
 nafa Acher - 28 déc. 2007 à 19:26
Bonjour,
j'aimerais afficher la liste des factures, avec le montant total du (sachant que les factures peuvent etre enregistrée sur plusieurs ligne, donc il faut un sum(debit) pour le total), le montant total des encaissement( sum(paiement), et le libellé et la date de la facture, voici ma requete qui ne fonctionne pas, enfin si ca m'affiche tout saudf que le total est erroné.

SELECT factures.date,factures.libelle,factures.ref, sum(factures.debit) as montant,fournisseurs.nom, sum(paiement_factures.montant)
FROM
factures inner join fournisseurs
on fournisseurs.id=factures.id_fournisseur
left join paiement_factures
on factures.ref=paiement_factures.ref
group by factures.ref;

a l'aide !
A voir également:

13 réponses

SELECT factures.date,factures.libelle,factures.ref, sum(factures.debit) as montant,fournisseurs.nom, sum(paiement_factures.montant)
FROM factures inner join fournisseurs on fournisseurs.id=factures.id_fournisseur
right join paiement_factures on factures.ref=paiement_factures.ref
group by factures.id;


Mais je penses qu'il faudrait repenser ta bdd,
une table ligne_facture serait plus adapté.

factures :
id
id_fournisseur
date

ligne_facture :
id
libelle
debit
ref_facture

Ce qui donnerai :
SELECT factures.date,factures.libelle,factures.ref, sum(ligne_factures.debit) as montant,fournisseurs.nom, sum(paiement_factures.montant)
FROM factures inner join fournisseurs on fournisseurs.id=factures.id_fournisseur
inner join ligne_factures on ligne_factures.ref_facture=facture.id
left join paiement_factures on factures.ref=paiement_factures.ref
group by factures.id;
1
up!
0
Si tu nous donnais un schéma meme textuel de ta bdd commenté ca nous arrangerai :)
0
Table factures :
id
id_fournisseur
date
libelle
debit
ref


Table paiement_factures:
id
ref
date
montant

Table fournisseur
id
nom


Une facture = plusieurs enregistrement dans la table factures, avec le meme "ref"
Une facture peut etre payée en plusieurs fois, donc il peut y avoir plusieurs lignes dans la table paiement_factures, avec le meme "ref", celui de la facture concernée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
le probleme, a mon avis, vient du fait que j'ai deux fois sum() et un seul group by, donc faut trouver une solution pour mettre deux group by ??? je ne sait pas :-(

up !
0
merci SPIDAG ! !
ca marche, et j'ai compris ma faute ;)


SELECT factures.date, factures.libelle, factures.ref, sum( ligne_facture.debit ) AS montant, fournisseurs.nom, sum( paiement_factures.montant )
FROM factures
INNER JOIN fournisseurs ON fournisseurs.id = factures.id_fournisseur
INNER JOIN ligne_facture ON ligne_facture.ref_facture = factures.ref
LEFT JOIN paiement_factures ON factures.ref = paiement_factures.ref
GROUP BY factures.ref
LIMIT 0 , 30;


merci une deuxème fois
0
mysql_ Messages postés 3 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 4 octobre 2007
4 oct. 2007 à 18:03
SELECT factures.date, factures.libelle, factures.ref, sum( ligne_facture.debit ) AS montant, fournisseurs.nom, sum( paiement_factures.montant )
FROM factures
INNER JOIN fournisseurs ON fournisseurs.id = factures.id_fournisseur
INNER JOIN ligne_facture ON ligne_facture.ref_facture = factures.ref
LEFT JOIN paiement_factures ON factures.ref = paiement_factures.ref
GROUP BY factures.ref
LIMIT 0 , 30;
0
mysql_ Messages postés 3 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 4 octobre 2007
4 oct. 2007 à 18:22
reeeeeee
la requette donne le meme resultat que ma première requete postée dans le forum, elle donne un résultat erronné.
exemple:

une facture quii as deux ligne, et réglée en une seule fois, le resultat du sum(paiement_facture.montant) est deux fois la somme payée.

:s :s

marche pas !
0
mysql_ Messages postés 3 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 4 octobre 2007
4 oct. 2007 à 18:38
up !
0
ce que tu demandes est peut etre impossible en une requete.
A moins de faire un distinct paiement_facture.id
dans le select
la tu verrais si ca crée un doublon.
Mais perso je ferais cela en 2 requetes.
0
bonsoir,
sa marche avec le distinct, pkoi toi tu le ferais en deux requettes ?
0
ce qui donne quoi au final ?

J'ai un problème similaire avec des doublons qui me compte 2 fois trop de ligne (je fais un count au lieu de sum dans mon cas)
0
Il me semble que tu oeux résoudre tous tes probèmes avec une requête du genre :

Deux tables : $tb_commandes='bt_affaire';
$tb_delegues='gt_groupe_utilisateurs';

Ce qui donne :

$cde1 = 'SELECT '.$tbl_delegues.'.id_utilisateur , '.$tbl_delegues.'.nom , '.$tbl_delegues.'.prenom , '.$tbl_delegues.'.telephone , '.$tbl_commandes.'.Receptionnaire, sum('.$tbl_commandes.'.Montant_HT) TotalHT, sum('.$tbl_commandes.'.Montant_TTC) ';
$cde1.=' FROM '.$tbl_commandes.' LEFT JOIN '.$tbl_delegues.'
ON '.$tbl_commandes.'.Receptionnaire = '.$tbl_delegues.'.id_utilisateur ORDER BY TotalHT
GROUP BY '.$tbl_commandes.'.Receptionnaire';


/*
$cde1.=' UNION ';

$cde1 .= 'SELECT '.$tbl_delegues.'.id_utilisateur , '.$tbl_delegues.'.nom , '.$tbl_delegues.'.prenom , '.$tbl_delegues.'.telephone , '.$tbl_commandes.'.Receptionnaire, sum('.$tbl_commandes.'.Montant_HT) , sum('.$tbl_commandes.'.Montant_TTC) ';

$cde1.=' FROM '.$tbl_commandes.' RIGHT JOIN '.$tbl_delegues.' ON '.$tbl_commandes.'.Receptionnaire = '.$tbl_delegues.'.id_utilisateur
GROUP BY '.$tbl_commandes.'.Receptionnaire';
0