problem sql frais de port panier

bobotoms
Invité n'ayant pas de compte PHPfrance

09 nov. 2006, 00:20

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...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

09 nov. 2006, 00:45

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 !

Mammouth du PHP | 19672 Messages

09 nov. 2006, 08:40

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"
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

bobotoms
Invité n'ayant pas de compte PHPfrance

09 nov. 2006, 12:08

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...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

09 nov. 2006, 12:12

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 nov. 2006, 16:39

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

bobotoms
Invité n'ayant pas de compte PHPfrance

13 nov. 2006, 01:49

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:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 nov. 2006, 11:28

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 ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer