Jump to content
Sign in to follow this  
ebouilleur

Requete mysql sur 3 table et multiples enregistrements

Rate this topic

Recommended Posts

Bonjour,

J'ai 3 tables : client, facture, prestation.

Je souhaite afficher un tableau récapitulatif qui doit m'afficher le prix de la facture, cad la somme de toutes les prestations d'un facture (qui pour ne pas simplifier n'ont pas le meme montant de tva et/ou de quantité)

Pour le moment, j'essaye deja d'avoir la somme juste des montant htva et deja je coince.

Voila ce que ca donne :


SELECT f.id_facture, f.numero_facture, f.date_facture,
c.nom, c.ville, p.quantite, p.prix_htva, p.tva
FROM facture as f
LEFT JOIN client AS c ON (f.id_client=c.id_client)
LEFT JOIN (SELECT SUM(prix_htva) FROM prestation GROUP BY f.id_facture) AS p ON (f.id_facture=p.id_facture)
WHERE f.id_membre=$sess_id_pseudo order by $choix_order_by desc limit $limite,$nombre

Phpmyadmin me sort que les colonnes p.quantite, p.prix_htva, p.tva n'existe pas :(

Une idée?

Merci

Edited by ebouilleur

Share this post


Link to post
Share on other sites

Normal, p n'est pas ta table prestation, mais le résultat de la requête SELECT SUM(prix_htva) FROM prestation GROUP BY f.id_facture (une sous-requête, donc), qui n'a qu'une seule colonne.

Deux solutions: soit tu rajoutes dans cette sous-requête les autres colonnes utiles, soit, et c'est probablement plus simple et plus logique, tu déplaces le SUM et le GROUP BY au niveau de la requête principale:


SELECT f.id_facture, f.numero_facture, f.date_facture,
c.nom, c.ville, SUM(p.quantite), SUM(p.prix_htva), SUM(p.tva)
FROM facture as f
LEFT JOIN client AS c ON (f.id_client=c.id_client)
LEFT JOIN prestation p ON (f.id_facture=p.id_facture)
WHERE f.id_membre=$sess_id_pseudo
GROUP BY f.id_facture, f.numero_facture, f.date_facture, c.nom, c.ville
ORDER BY $choix_order_by desc
LIMIT $limite,$nombre

Jacques.

Share this post


Link to post
Share on other sites

Bonsoir Jacques,

OK merci je vois l'idée et en effet ca fonctionne mieux

Après c'est sur que je vais pas faire un somme de tva, mais le principe est ok ;)

Merci

Share this post


Link to post
Share on other sites

Ça aurait pu être le montant de la TVA (par opposition au taux). Un simple sum(p.prix_htva * p.tva) devrait faire l'affaire si c'est un taux.

Jacques.

Share this post


Link to post
Share on other sites

Bon au final ca donne ca :


SELECT f.id_facture, p.id_prestation, f.numero_facture, f.date_facture, c.nom, c.ville, sum( (
p.prix_htva + ( (
p.prix_htva * p.tva
) /100 ) ) * p.quantite
) AS prixFacture
FROM facture f
LEFT OUTER JOIN client c ON ( f.id_client = c.id_client )
LEFT OUTER JOIN prestation p ON ( f.id_facture = p.id_facture )
WHERE f.id_membre =1
GROUP BY f.id_facture
LIMIT 0 , 30

Merci

Share this post


Link to post
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
Sign in to follow this  

×
×
  • Create New...