Page 1 sur 1

problem sql frais de port panier

Posté : 09 nov. 2006, 00:20
par bobotoms
bonjour a tous,

j'ai un probleme sql je sais qu'ici c'est sur le php :? mais y a aucun autre forum qui a su me repondre :cry: , voila le souci : dans mon panier je cherche a faire en sorte que si il atteind 60 euros cela suprime les frais de port et donc voici ma requete :

Code : Tout sélectionner

SELECT now() AS date, SUM(panier.quantite*produit.prix_ttc)+5 AS total_ttc WHERE total_ttc <60, SUM(panier.quantite*produit.prix_ht) AS total_ht FROM panier INNER JOIN produit ON produit.numero = panier.article WHERE panier.client = 'paramClient' GROUP BY panier.client
pourriez vous m'aider svp...

Re: problem sql frais de port panier

Posté : 09 nov. 2006, 00:45
par albat
j'ai un probleme sql je sais qu'ici c'est sur le php :?
Et le forum SQL & Bases de données, c'est fait pour qui ? :roll:

Allez hop, déplacement !

Posté : 09 nov. 2006, 08:40
par Cyrano
Il y a des bizarreries dans ta requête : d'abord, il y a une clause WHERE de trop qui n'a strictement rien à faire là où tu l'as placée entre tes deux SUM(). Comme tu as déjà une clause WHERE plus loin, déplaces-y le "total_ttc < 60" dedans avec un AND et teste à nouveau.

Et envoie le message d'erreur le cas échéant, on ne devinera pas les détails avec un simple "ça marche pas"

Posté : 09 nov. 2006, 12:08
par bobotoms
alors j'ai changé et j'ai inscrit :

SELECT now() AS date, SUM(panier.quantite*produit.prix_ttc) +5 AS total_ttc, SUM(panier.quantite*produit.prix_ht) AS total_ht
FROM panier INNER JOIN produit ON produit.numero = panier.article
WHERE panier.client = 'paramClient' AND total_ttc <60
GROUP BY panier.client

et voici le message d'erreur :(

MySQL Error#: 1054
Unknown column 'total_ttc' in 'where clause'

je comprend pas...

Posté : 09 nov. 2006, 12:12
par albat
La clause WHERE te permet d'effectuer des tests sur des valeurs enregistrées,
cad des champs présents dans ta table.

Si la valeur que tu veux tester est calculée dans la même requête,
il te faudra plutôt regarder du côté de la clause HAVING.

Mais c'est très déconseillé car bouffeur de ressources.

Posté : 09 nov. 2006, 16:39
par zeus
Tu peut également utiliser la fonction SQL IF() qui permet de tester des résultats directement dans le SELECT

A partir de là, tu peut récupére, en une seule requete, tout les paniers, que leur montant soit supérieur à 60€ ou pas, en prennant en compte les frais de port ;)

NB : @frais_port est une syntaxe ORACLE qui signifie "la variable frais_port", je ne sais pas si elle existe en MySQL. A remplacer par la valeur des frais de port dont tu disposes

Code : Tout sélectionner

SELECT now() as date, IF ( SUM(panier.quantite*produit.prix_ttc) > 60, SUM(panier.quantite*produit.prix_ttc), SUM(panier.quantite*produit.prix_ttc) + @frais_port ) as total_ttc, IF ( SUM(panier.quantite*produit.prix_ht) > 60, SUM(panier.quantite*produit.prix_ht), SUM(panier.quantite*produit.prix_ht) + @frais_port ) as total_ht, FROM panier INNER JOIN produit ON produit.numero = panier.article WHERE panier.client = 'paramClient' GROUP BY panier.client
Cette syntaxe est disponible pour MySQL > 3.23

Posté : 13 nov. 2006, 01:49
par bobotoms
bonjour,
et en premier lieu merci pour votre aide.

bon j'ai essayé tout ce que vous avez indiqué et rien a marcher je pense que je ne suis pas sufisament calé :oops: pour faire ca mais je continue de chercher... :wink:

Posté : 13 nov. 2006, 11:28
par zeus
Quand tu dit que tu as essayé, tu as essayé quoi ?

Est-ce que tu as adapté ma requete pour tes besoins ?

Qu'est ce qui te fait dire que ça ne marche pas ? Résultats retournés faux, pour quels raisons ?