problème de boucle (surement)

xaxa
Invité n'ayant pas de compte PHPfrance

08 févr. 2011, 18:46

Bonjour,

J'aurais besoin d'un peu d'aide. Je vais essayer de vous expliquer.
J'ai une requête qui dans phpmyadmin me renvoie ceci :

________________________
choix | id | nb_produit
---------------------------------
1 - 3 - 7
1 - 8 - 1
1 - 10 - 2
1 - 11 - 1
2 - 12 - 1
2 - 13 - 3
2 - 14 - 7
2 - 15 - 8
3 - 16 - 8

Chaque ligne représente une commande, avec le nombre de produits pour chacune trié par mois ( variable choix = mois, donc choix=1 >> janvier)
Je cherche à savoir combien j'ai de produits supérieur à 5. Par exemple pour la première ligne, j'ai 7 produits donc 2 produit supérieur à 5. J'additionne ensuite cette quantité par mois
donc je devrais avoir pour le mois de :
-Janvier (choix = 1) 2 produits
- Février = 5 produits (7-5)+(8-5)
- Mars = 3 produits.

Je me retrouve avec en sortie:
Janvier>> 2 produits
Février >> 7 produits
Mars >> 10 produits

Clairement, il additionne tout. pour février il a bien trouver 5 produit mais + les 2 de janvier, pour mars il a bien trouver les 3 produits mais il a rajouter les 7 de février.
En résumé >> janvier = les produits supérieur a 5 de janvier
février >> les produits de janvier et février
mars >> les produits de janvier février et mars. Il devrait pas faire ca.
J'en deviens fou. Une semaine que je cherche alors je me tourne vers vous.

Voici mon code, il doit y avoir un mini détail qui fait tt rater ..


$sql_cout = "SELECT $SELECT AS choix, id_commande AS id, count( id_produit ) AS nb_produit
FROM commandes_detail , commandes
WHERE commandes_detail.id_commande = commandes.id
AND commandes.statut
IN (
2, 3, 4, 100
)
$WHERE
GROUP BY (
id_commande
)";



sql_mysql_query ($sql_cout, 'cout');


$test = 0;
$val_sup = 0;


while ($row = mysql_fetch_object($query_cout)) {
    
        $tab_cout[ $row -> choix] = $row -> nb_produit;
        
        
        // si le nombre de produit est sup à 5
        if ($tab_cout[$row -> choix] = $row -> nb_produit > 5)
    
            {    
                
            $val_sup = 0;

    
                // stocke  le nombre de produit supérieur à 5 pour chaque commande (si 7 commande $sup = 2)
                $sup = ($tab_cout[$row -> choix] = $row -> nb_produit)-5;
 
                    
                    //somme les valeurs sup à 5                     
                    $val_sup +=   $sup;              
                    
            }
            
    //retourne val_sup
    $tab_cout[ $row -> choix] = $val_sup;
                                                                       } 

J'ai a peu pres tout essayer, bien remettre toutes les variables à zéro, mettre des prints, des message d erreurs partt..
Je vous remercie d'avance !!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 févr. 2011, 00:24

Et pourquoi pas tout simplement faire :
$tab_cout = array();

while ($row = mysql_fetch_object($query_cout)) {
    
   if ($row->nb_produit > 5) {
      $tab_cout[$row->choix] += $row->nb_produit - 5;
   }

}

print_r($tab_cout);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

xaxa
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 11:40

Merci, mais ya un truc qui fonctionne pas .

Ca me renvoie une erreur : [Erreur]: Undefined index: 1
Pourtant si je fais un echo $row -> choix ca me renvoie 1 avt le message d erreur.

$tab_cout[$row->choix] = $row->nb_produit - 5;

En mettant un = à la place du += ca ne plante pas, et me renvoie Array ( [1] => 2 [2] => 3 [3] => 3 ) donc c presque ca sauf que évidement du coup pour février ben ca me fait plus la somme (2+3) ca ne met que le 3 puisque j'ai enlevé l'addition.
Mais l'addition génère l'erreur .

ViPHP
ViPHP | 5462 Messages

09 févr. 2011, 11:44

parce que il n'existe pas au debut

fais
while ($row = mysql_fetch_object($query_cout)) 
{
    if ($row->nb_produit > 5)
    {
        if(!isset($tab_cout[$row->choix]))
        {
            $tab_cout[$row->choix] = 0;
        }

        $tab_cout[$row->choix] += $row->nb_produit - 5;
    }
}

xaxa
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 12:18

ca marcheeeeeeeeee
youpiii

je vous aime

Je v voir si je peux faire le même genre de chose pour les autres pages.

Je vous remercie.

(ceci dit j'aimerai bien qu'on m explique pourquoi mon code a moi à la base ne fonctionnait pas ..)

ViPHP
ViPHP | 5462 Messages

09 févr. 2011, 12:24

parce que tu peux pas ajouter un valeur a quelque chose qui n'existe pas

xaxa
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 12:27

oui oui mais je parlais de mon code à la toute base tout en haut, je faisais pas les choses comme ca donc je n'avais pas ce problème de non existence d'une variable

ViPHP
ViPHP | 5462 Messages

09 févr. 2011, 12:32

oui oui mais je parlais de mon code à la toute base tout en haut, je faisais pas les choses comme ca donc je n'avais pas ce problème de non existence d'une variable
il existait puisque tu faisais :
$tab_cout[$row->choix] = $row->nb_produit;

xaxa
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 12:38

ok merci bien
bonne journée