recherche pour faire un total de chaque produit

Eléphant du PHP | 181 Messages

05 oct. 2005, 10:39

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

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

05 oct. 2005, 10:44

Ouf, t'es mal parti là! Utilises plutôt une requête SQL de regroupement au lieu d'utiliser des boucles PHP
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 568 Messages

05 oct. 2005, 10:44

Il faudrait faire un tour sur la doc SQL et se pencher sur les clauses COUNT() et GROUP BY pour ta requête...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2005, 10:44

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

Eléphant du PHP | 181 Messages

05 oct. 2005, 10:55

: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(*(????

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2005, 11:00

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

Eléphant du PHP | 181 Messages

05 oct. 2005, 11:03

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2005, 11:12

ton tri sur les commandes, c'est quoi les critères ? les produits des commandes du jour, ... ?
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

Eléphant du PHP | 181 Messages

05 oct. 2005, 11:18

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2005, 11:28

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

ViPHP
pjl
ViPHP | 2119 Messages

05 oct. 2005, 11:29

est ce qu'il faut autre chose???
Oui, le type des champs.

Eléphant du PHP | 181 Messages

05 oct. 2005, 11:37

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2005, 11:52

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

Eléphant du PHP | 181 Messages

05 oct. 2005, 12:11

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

ViPHP
pjl
ViPHP | 2119 Messages

05 oct. 2005, 12:28

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
Modifié en dernier par pjl le 05 oct. 2005, 12:50, modifié 1 fois.