Requête Somme des prix...

Résolu
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   -  
xMiLeY Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis sur un site marchand, et je souhaiterais, lorsque l'on ajoute des produits dans le panier, qu'il y ait le prix total de tous ces produits. Voici mes tables :

table produit : id (clé primaire), nomproduit, description, réf, prix;
table commande : id (clé primaire), pseudo, nomproduit, ref (clé étrangère);

J'ai déjà tenté 2 requête SQL, qui semble ne pas vouloir fonctionner. Les voici :

		$sqlsum = "SELECT SUM(produit.prix)
					FROM produit, commande
					WHERE produit.ref = commande.ref
					AND pseudo = '".$_SESSION['pseudo']."'";
					
		$reqsum = mysql_query ($sqlsum) or die ("Erreur de requete");
		$nbr = mysql_num_rows ($reqsum);
		
		while ($tabsum = mysql_fetch_array ($reqsum));
		{
			for ($i = 0; $i <= $nbr; $i++)
			{
				$prixtotal = $prixtotal + $tabsum['prix'][$i];
			}
		} 


Et celle-ci :

$sqlsum = "SELECT produit.prix
					FROM produit, commande
					WHERE produit.ref = commande.ref
					AND produit.prix IN (SELECT SUM(prix) FROM produit WHERE pseudo = '".$_SESSION['pseudo']."'";

$reqsum = mysql_query ($sqlsum) or die ("Erreur de requete");
		$nbr = mysql_num_rows ($reqsum);
		
		while ($tabsum = mysql_fetch_array ($reqsum));
		{
			for ($i = 0; $i <= $nbr; $i++)
			{
				$prixtotal = $prixtotal + $tabsum['prix'][$i];
			}
		}


Il n'y a aucune erreur SQL. Pouvez-vous m'indiquer où st le problème? Je ne vois vraiment pas...

Merci à vous.


11 réponses

Profil bloqué
 
As-tu essayé avec une jointure ?
0
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   21
 
Salut,

Oui, mais le résultat est le même, ça m'affiche tout le temps :
- Prix total = 0;

Je pense que l'erreur vient de ma requête, mais je ne vois vraiment pas où...
0
lys44 Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   5
 
Perso j'aurais fais quelque chose dans ce genre pour la requête :

SELECT Sum(a.prix) AS Prix_Total_Panier
FROM produit a
WHERE a.nomproduit IN (SELECT b.nomproduit FROM commande b WHERE pseudo = '".$_SESSION['pseudo']."'

CAD que je demanderai à la requête de calculer le prix total SI le nom du produit associé au prix dans la table Produit existe bien dans la table Commande, là où le pseudo entré dans la commande correspond au pseudo de l'utilisateur...

Mais après je ne suis pas sûre...
0
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   21
 
lys44 : Merci pour ta réponse !

Mais malheureusement le résultat est exactement le même, le prix total ne veut pas lâcher son 0...
0

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

Posez votre question
lys44 Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   5
 
Je ne sais pas si cela changera quelque chose mais essaye peut être avec un EXISTS ...

On ne sait jamais... =/
0
Thewmat
 
Tu peux toujours faire une requête d'ajout tu recupère le dernier id créer ainsi que la référence puisque c'est la clé étrangère et tu fais une deuxième requête d'ajout.
0
xMiLeY Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   7
 
Je ne comprend pas bien dans tes tables comment on peut savoir que tel produit appartient à telle commande???

Imaginons le produit ac la référence 4445 et le produit avec la référence 4446 ds ta table produit font parti de la même commande?? Quel champ est commun aux 2 dans ta table commande à part le "pseudo"?
0
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   21
 
lys44 et Thewmat : Je test vos solution et je vous dis :)

xMiLeY : Le pseudo n'apparaît pas dans la table produit. Le champ commun aux 2 tables est "ref" (référence du produit) :)
0
Thewmat
 
xMiLeY il y a un numéro de commande et il va y avoir une ou plusieurs ligne dans la table commande en fonction de si 1 ou plusieurs produit(s) sont sélectionnés. donc 1 ou plusieurs ref(puisque c'est la clé étrangère)
0
xMiLeY Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   7
 
Mais oui mais dans la table commande tu retrouve des "ref" issus de produit.
Et vu que l'id commande est la clé primaire, peut pas y avoir plusieurs lignes...

Y'a un truc gros comme un camion que je vois pas c'est dingue.
0
Thewmat
 
Peut être mettre l'id de la commande en clé étrangère dans la table produit!
0
xMiLeY Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   7
 
ouai mais dans ce cas là, t'a une vieille redondance des infos produits :)
0
Thewmat
 
un produit peux avoir plusieurs commande et une commande plusieurs produit... Donc la création d'une 3eme table entre les deux avec dedans la référence la quantité et clé étrangère id produit et id commande.
0
xMiLeY Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   7
 
oui bah oui, c'est ce qui me paraissait le plus évident, c'est pour ca je comprend pas comment il retrouve les produits de telle ou telle commande avec ce qu'il nous a montré.
0
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   21
 
lys44 : Le "EXISTS" donnait le même résultat. Mais ta première solution était bonne. C'est moi qui m'étais gouré comme un pieu juste après :honte:

Pour ceux et celles que ça intéresseraient :

$sqlsum = "SELECT SUM(prix) AS total 
   FROM produit 
   WHERE ref IN (SELECT ref FROM commande WHERE pseudo = '".$_SESSION['pseudo']."')"; 
      
  $reqsum = mysql_query ($sqlsum) or die ("Erreur de requete"); 
   
  while ($tabsum = mysql_fetch_array ($reqsum)) 
  { 
                    $prixtotal = $prixtotal + $tabsum['total']; 
                    echo $prixtotal; 
                }


Merci à vous tous :)
0
lys44 Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   5
 
D'accord :)

Tant mieux si ça marche alors ;)

Bonne continuation, et de rien!
0