IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

mysql array boucle while perdue


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut mysql array boucle while perdue
    Bonsoir,
    j'ai un souci
    Je suis entrain de faire un gestionnaire de stock.
    Je souhaite a partir de 2 dates sortir
    un stock a la date 1 ex: 1 avril 2015
    un état des mouvements entre date 1 et 2 soit 1 avril 2015, toutes les entrées puis toutes les sorties jusqu'au 30 sept 2015
    un stock a la date 2 ex: 30 sept 2015

    Pour sa j'ai donc 3 requête sql avec les filtres qu'il faut pour chaque requête.
    Mais niveau affichage j'ai un souci ou je ne sais pas comment mis prendre. Je me suis donc dit que j'allais fusionner des requêtes sql et j'ai pensé le faire avec des arrays mais je bloques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    		do {
    			$row_stock_date_3['produit_id'] = array (
    			'produit' => ''.$row_stock_date_3['produit'].'',
    			'stock_date_1' => ''.((float)$row_stock_date_3['total_in']-(float)$row_stock_date_3['total_out']).'',
    			'mouvement_total_out' => '0',
    			'mouvement_total_in' => '0',
    			'stock_date_2' => '0',
    			'produit_id' => ''.$row_stock_date_3['produit_id'].''
    			);
    		} while ($row_stock_date_3 = mysql_fetch_assoc($stock_date_3));
    ?>
    <?php
    		do {
    			$row_stock_date['produit_id'] = array (
    			'produit' => ''.$row_stock_date['produit'].'',
    			'stock_date_1' => '0',
    			'mouvement_total_out' => ''.(float)$row_stock_date['total_out'].'',
    			'mouvement_total_in' => ''.(float)$row_stock_date['total_in'].'',
    			'stock_date_2' => '0',
    			'produit_id' => ''.$row_stock_date['produit_id'].''
    			);
     		 echo '<pre>';
    		 print_r($row_stock_date['produit_id']);
    		 echo '</pre>';
    		} while ($row_stock_date = mysql_fetch_assoc($stock_date));	
    ?>
    <?php
    		do {
    			$row_stock_date_2['produit_id'] = array (
    		//	$tbl_3 = array (
    			'produit' => ''.$row_stock_date_2['produit'].'',
    			'stock_date_1' => '0',
    			'mouvement_total_out' => '0',
    			'mouvement_total_in' => '0',
    			'stock_date_2' => ''.((float)$row_stock_date_2['total_in']-(float)$row_stock_date_2['total_out']).'',
    			'produit_id' => ''.$row_stock_date_2['produit_id'].''
    			);
    		} while ($row_stock_date_2 = mysql_fetch_assoc($stock_date_2));
    ?>
    je mets ici une partie des 3 tableau affiché via print_r

    la 1er requete me donne
    Array
    (
    [produit] => Actirob b
    [stock_date_1] => 183
    [mouvement_total_out] => 0
    [mouvement_total_in] => 0
    [stock_date_2] => 0
    [produit_id] => 68
    )
    la 2nd
    Array
    (
    [produit] => Actirob b
    [stock_date_1] => 0
    [mouvement_total_out] => 165.8
    [mouvement_total_in] => 10
    [stock_date_2] => 0
    [produit_id] => 68
    )
    la 3eme
    Array
    (
    [produit] => Actirob b
    [stock_date_1] => 0
    [mouvement_total_out] => 0
    [mouvement_total_in] => 0
    [stock_date_2] => 27.2
    [produit_id] => 68
    )

    J'ai mis des 0 pour les donné que je souhaite pas conserver et j'ai formé des tableaux de structure identique pensant qu'il serait plus facile pour les fusionner mais je bloque...
    Car au final je me retrouve avec une multitude de tableau et non 3.

    J'aimerai obtenir ceici moi.
    (
    [produit] => Actirob b
    [stock_date_1] => 183
    [mouvement_total_out] => 165.8
    [mouvement_total_in] => 10
    [stock_date_2] => 27.2
    [produit_id] => 68
    )

    le produit_id serait la clé unique ainsi que le nom.

    Comment dois je mis prendre? des idées?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dis nous quel est ton problème d'affichage plutôt pour commencer.

    Au passage, tu écris des choses étranges comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ''.(float)$row_stock_date['total_out'].''
    A quoi sert la conversion en flottant et quoi servent les '' ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    les '' ne servent plus excuse, j'ai tellement fait d'essaie que j'ai pas tout nettoyer.

    les (float) retire les 0 inutile après la virgule. J'ai une précisions a 0.0000 et pour que ce soit mieux a l'affichage pour 0.4000 j'ai rajouter (float) et obtenir 0.4

    Mon but et donc d'avoir dans un seul tableau un ensemble de donner provenant des 3 tableaux du départ.
    pour faire un affichage en tableau HTML/DIV etc...

    Nom du produit | stock à la du 00-00-0000 | Sortie | Entrer | stock à la du 00-00-0000
    Nom du produit | stock à la du 00-00-0000 | Sortie | Entrer | stock à la du 00-00-0000
    Nom du produit | stock à la du 00-00-0000 | Sortie | Entrer | stock à la du 00-00-0000
    Nom du produit | stock à la du 00-00-0000 | Sortie | Entrer | stock à la du 00-00-0000
    Nom du produit | stock à la du 00-00-0000 | Sortie | Entrer | stock à la du 00-00-0000
    Nom du produit | stock à la du 00-00-0000 | Sortie | Entrer | stock à la du 00-00-0000


    et l'id servira à aller dans chaque produit pour avoir les détailles.

    J'ai répondu a ta question?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Alors simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    	while ($row = mysql_fetch_assoc($stock_date_3)) {
    		$data[$row['produit_id']]['produit'] = $row['produit'];
    		$data[$row['produit_id']]['stock_date_1'] = round($row['total_in']-$row['total_out'], 1);
    	}
     
    	while ($row = mysql_fetch_assoc($stock_date)) {
    		$data[$row['produit_id']]['mouvement_total_out'] = round($row['total_out'],1);
    		$data[$row['produit_id']]['mouvement_total_in'] = round($row['total_in'],1);
    	}
     
    	while ($row = mysql_fetch_assoc($stock_date_2)) {
    		$data[$row['produit_id']]['stock_date_2'] = round($row['total_in']-$row['total_out'], 1);
    	}
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup, j'ai corriger les 3 petites erreur. Sa marche nickel

    Il me semble qu'à un moment j'étais pas loin mais moi les valeur s'écrasé systématiquement. J'ai beaucoup tourné en rond.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Bon je me suis laissé avoir... j'avais eu ce problème également...

    Cela marche mais...
    Les 3 requêtes sql ne sorte pas le même nombre de ligne cela dépend de l'activité des différents produit et des dates logique.
    Mais ton association des 3 requêtes en 1 tableau mélange les informations. Sa comble les troues vers le haut en quelque sorte.
    Si à la 1er date n'y avait pas de stock ou a la 2eme il va prendre la donnée de la ligne suivante. Ainsi de suite... et donc les données sont de plus en plus fausse.

    une idée de comment résoudre le probleme?

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans le tableau produit par mon code, les données sont classés par produit_id, il n'y a donc pas de trou et pas de mélange même si un produit n'a pas de ligne de résultat dans une requête.
    C'est ton affichage qui n'est pas bon
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    J'ai pas encore faire l'affichage...
    J'ai simplement regardé le contenue du tableau avec
    echo '<pre>';
    print_r($data);
    echo '</pre>';

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'est ce qui tu appelles un mélange alors ?
    Comme je t'ai dis, les données sont classées par produit_id, tu ne peux pas avoir une valeur qui n'est pas sur le bon produit.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
       [68] => Array
            (
                [produit] => Actirob b
                [stock_date_1] => 27.2
                [stock_date_2] => 183
            )
     
        [69] => Array
            (
                [produit] => Afalon 50 L 
                [stock_date_1] => 302.7
                [mouvement_total_out] => 165.8
                [mouvement_total_in] => 10
                [stock_date_2] => 130.7
            )
     
        [73] => Array
            (
                [produit] => Altacor
                [stock_date_1] => 0.42
                [mouvement_total_out] => 165.8
                [mouvement_total_in] => 10
                [stock_date_2] => 0.2
            )
     
        [74] => Array
            (
                [produit] => Amistar
                [stock_date_1] => 34
                [mouvement_total_out] => 165.8
                [mouvement_total_in] => 10
            )
     
        [75] => Array
            (
                [produit] => Anti Mousse Sovilo
                [stock_date_1] => 0.42
                [stock_date_2] => 0.42
            )
     
        [78] => Array
            (
                [produit] => Aviator xpro
                [stock_date_1] => 3
                [mouvement_total_out] => 165.8
                [mouvement_total_in] => 10
                [stock_date_2] => 40
    Tu peux constater que mouvement_total_out et mouvement_total_in sont toujours identique déjà.
    J'essaie de vérifié que ce soit pas ma requête sql mais je l'avais déjà vérifié et elle est assez simple.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Bon j'ai oublié de retiré des parties du code que j'avais moi meme mis cad tout les
    $row_stock_date = mysql_fetch_assoc($stock_date); etc..

    forcé conflit...

    et dans le bout de code copier coller bêtement
    il y avait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		$data[$row['produit_id']]['mouvement_total_out'] = round($row_stock_date['total_out'],1);
    		$data[$row['produit_id']]['mouvement_total_in'] = round($row_stock_date['total_in'],1);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		$data[$row['produit_id']]['mouvement_total_out'] = round($row['total_out'],1);
    		$data[$row['produit_id']]['mouvement_total_in'] = round($row['total_in'],1);

Discussions similaires

  1. multiples array dans un, combiner avec boucle while
    Par leymiris dans le forum Langage
    Réponses: 2
    Dernier message: 27/07/2010, 16h19
  2. Réponses: 6
    Dernier message: 27/05/2010, 10h48
  3. [PHP 5.3] Parcourir deux array à la manière de deux boucle while
    Par jflorence dans le forum Langage
    Réponses: 8
    Dernier message: 23/03/2010, 17h35
  4. [MySQL] array boucle while mots clé
    Par fx_web dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/10/2009, 13h05
  5. erreur mysql-fetch_array dans une boucle While
    Par carmen256 dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/04/2006, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo