Page 1 sur 2

recherche pour faire un total de chaque produit

Posté : 05 oct. 2005, 10:39
par ruly
bonjour,

encore et encore des ptits problems :oops:

donc voici mon dernier... celui ci je vois pas trop comment m'y prendre.....

donc j'ai un tableau de donnees que je recupere de ma base sql....

et la j'aimerais faire une sorte de listing pour regrouper les meme produits pour faire un comptage des produits sorties.

ex. j'ai 3 commandes dont qq produits.....
j'aimerais que sur le 3 commandes on regroupe les meme produits pour contbilise les sortie de tel ou tel produit.

je sais pas si j'ai ete bien clair... :roll:

voici mon code:

Code : Tout sélectionner

<?php session_start(); include('../../lib/connexBDD.lib.php') ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>STOCK CUISINE - CUISINE - IMPRESSION</title> <style type="text/css"> <!-- body { background-color: #ebebeb; } --> </style></head> <body> <p><a href="../../index.php"><em>Retour à l'acceuil </em></a> </p> <p><em>Pour imprimer: <strong>Ctrl + P</strong> </em></p> <table width="50%" border="1" cellspacing="0" > <tr> <td><div align="center"><strong>N&deg;</strong></div></td> <td><div align="center"><strong>D&eacute;signation</strong></div></td> <td><div align="center"><strong>Quantit&eacute;</strong></div></td> </tr> <?php //initialisation: $commande_id = $_SESSION['impression']; $j=0; $tab = array(); foreach ($commande_id as $normal) { $sql_normal = "select * from contient where commande_id = '".$normal."'"; $req_normal = mysql_query($sql_normal) or die('Erreur SQL !<br>'.$sql_normal.'<br>'.mysql_error()); $cols_normal = mysql_num_rows($req_normal); for ($i=0;$i<$cols_normal;$i++) { $commande_id = mysql_result($req_normal,$i,0); $produit_id = mysql_result($req_normal,$i,1); $quantite = mysql_result($req_normal,$i,2); $tab[$j][0] = $produit_id; $tab[$j][1] = $quantite; $j++; } } ?> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table> <p>&nbsp; </p> </body> </html>
qqn voit comment si prendre????

merci d'avance!!!!

Posté : 05 oct. 2005, 10:44
par sadeq
Ouf, t'es mal parti là! Utilises plutôt une requête SQL de regroupement au lieu d'utiliser des boucles PHP

Posté : 05 oct. 2005, 10:44
par heddicmi
Il faudrait faire un tour sur la doc SQL et se pencher sur les clauses COUNT() et GROUP BY pour ta requête...

Posté : 05 oct. 2005, 10:44
par zeus
Je n'ai pas bien compris

Tu as tout tes produits et tu veut les trier par catégories pour compter le nombre de produits par catégorie

OU

tu as plusieurs commandes et tu veut compter le nombe de produit de toutes les commandes

EDIT : OUAH !!! 3 post en même temps ... :shock:

Posté : 05 oct. 2005, 10:55
par ruly
:lol: :lol: :lol: :lol:

au moins c'est simpa ... reponse rapide!!!! :wink:

merci

je vais donne un exemple ca serap lus simple:

j'ai 3 commandes avec dedant:

Code : Tout sélectionner

co N°1: 1 produit x 5 produit y 3 produit z co n°2 2 porduit x 1 porudit y co n°3: 2 produit y 1 produit z
donc mon dernier listing devrait me donner ceci:
produit x: 3
produit y: 8
produit z: 4

pour vous ca serait plus simple de faire une requete sql avec des group by et des count(*(????

Posté : 05 oct. 2005, 11:00
par zeus
pour la dernièer question, je dit oui à 2 bras levé. Un tri directement en SQL sera toujours plus rapide que d'importer la totalité des données puis un tri en PHP

Ensuite, donne nous la structure de ta base (commande, produit, ...) pour avoir une idée plus claire

Posté : 05 oct. 2005, 11:03
par ruly
a ouais c'est vrai j'avais pas pense. mais ca fait une sorte de travail a double :(

en fait j'ai 3 tables:
-commande:
commande_id et d'autre champs qui ne servent pas a cette requette comme la date, qui a passe la commande.

-contient:
commande_id, produit_id, quantite

-produit:
produit_id, produit_designation, produit_num

est ce qu'il faut autre chose???

Posté : 05 oct. 2005, 11:12
par zeus
ton tri sur les commandes, c'est quoi les critères ? les produits des commandes du jour, ... ?

Posté : 05 oct. 2005, 11:18
par ruly
en fait j'ai un page avant avec tout le listing des produits dont l'utilisateur aura rentrer un date de debut de recherhce et une date de fin de recherche,

Code : Tout sélectionner

select commande_id, avion_id, commande_date from commande where commande_date >= '".$date_debut."' and commande_date <= '".$date_fin."' order by 3 desc

Posté : 05 oct. 2005, 11:28
par zeus

Code : Tout sélectionner

select commande_id, avion_id, commande_date, produit_id, COUNT(produit_id) from (commande JOIN contient ON commande.commande_id=contient.commande_id) JOIN produit ON contient.produit_id=produit.produit_id where commande_date >= '".$date_debut."' and commande_date <= '".$date_fin."' order by produit_id desc
Et tu auras l'id de chaque produits et le nombre de ces produits

Posté : 05 oct. 2005, 11:29
par pjl
est ce qu'il faut autre chose???
Oui, le type des champs.

Posté : 05 oct. 2005, 11:37
par ruly
pour pjl
-commande:
commande_id --> interger

-contient:
commande_id --> integer
produit_id --> integer
quantite --> integer

-produit:
produit_id --> interger
produit_designation --> varchar
produit_num --> interger

pour zeus:
la table contient:

Code : Tout sélectionner

commande_id | produit_id | quantite | prix 1 11 3 2.5 2 2 3 1.5 2 11 3 2.5 1 9 5 11.5 2 1 2 3.5 3 11 5 2.5 3 4 5 3.5 4 12 6 4

Posté : 05 oct. 2005, 11:52
par zeus

Code : Tout sélectionner

select commande_id, avion_id, commande_date, produit_id, SUM(produit_quantite) from (commande JOIN contient ON commande.commande_id=contient.commande_id) JOIN produit ON contient.produit_id=produit.produit_id where commande_date >= '".$date_debut."' and commande_date <= '".$date_fin."' order by produit_id desc

Posté : 05 oct. 2005, 12:11
par ruly
je comprend pas du tout ta requete..... :oops:

ya plein d'erreur et pour changer les erreurs faudrais que je ocmprenne le fonctionnement de cette requette....

Posté : 05 oct. 2005, 12:28
par pjl

Code : Tout sélectionner

SELECT PR.produit_designation, SUM(CO.quantite) AS qte_cde FROM produit PR INNER JOIN contient CO ON PR.produit_id = CO.produit_id INNER JOIN commande CDE ON CO.commande_id = CDE.commande_id [OPTION]WHERE la condition dont tu as besoin[/OPTION] GROUP BY PR.produit_designation
il te reste juste à mettre des conditions si tu en as besoin.

Edit : suite à la remarque de Sadeq, il manque le GROUP BY