Requête Somme des prix...

Résolu/Fermé
reaverlost Messages postés 150 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 - 4 juin 2010 à 16:20
xMiLeY Messages postés 68 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 15 juin 2010 - 7 juin 2010 à 15:48
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.


A voir également:

11 réponses

As-tu essayé avec une jointure ?
0
reaverlost Messages postés 150 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 21
7 juin 2010 à 09:30
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 mardi 25 mai 2010 Statut Membre Dernière intervention 21 mars 2011 5
7 juin 2010 à 09:46
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 jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 21
7 juin 2010 à 10:11
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 mardi 25 mai 2010 Statut Membre Dernière intervention 21 mars 2011 5
7 juin 2010 à 11:07
Je ne sais pas si cela changera quelque chose mais essaye peut être avec un EXISTS ...

On ne sait jamais... =/
0
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 jeudi 3 juin 2010 Statut Membre Dernière intervention 15 juin 2010 7
7 juin 2010 à 11:37
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 jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 21
7 juin 2010 à 11:41
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
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 jeudi 3 juin 2010 Statut Membre Dernière intervention 15 juin 2010 7
7 juin 2010 à 15:24
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
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 jeudi 3 juin 2010 Statut Membre Dernière intervention 15 juin 2010 7
7 juin 2010 à 15:32
ouai mais dans ce cas là, t'a une vieille redondance des infos produits :)
0
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 jeudi 3 juin 2010 Statut Membre Dernière intervention 15 juin 2010 7
7 juin 2010 à 15:39
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 jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 21
Modifié par reaverlost le 7/06/2010 à 12:08
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 mardi 25 mai 2010 Statut Membre Dernière intervention 21 mars 2011 5
7 juin 2010 à 12:09
D'accord :)

Tant mieux si ça marche alors ;)

Bonne continuation, et de rien!
0