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

PHP & Base de données Discussion :

1 reqûete/1 tableau -> 3 tableaux [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut 1 reqûete/1 tableau -> 3 tableaux
    Bonjour,

    J'ai la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT YEAR(date_f) annee, MONTH(date_f) mois, COUNT(id_projet) total_projet FROM PROJETS p GROUP BY YEAR(date_f), MONTH(date_f)
    Je ressors les données avec cette boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($row = $query_total_projets->fetch()) {
          $tab = array($row['annee'], $row['mois'], $row['total_projet']);
    }
    Les données donnent ceci :
    annee 	mois 	total_projet
    2012 	9 	4
    2012 	10 	13
    2012 	11 	26
    2012 	12 	21
    2013 	1 	13
    2013 	2 	9
    2013 	3 	23
    2013 	4 	40
    2013 	5 	51
    2013 	6 	32
    2013 	7 	45
    2013 	8 	18
    2013 	9 	36
    2013 	10 	39
    2013 	11 	30
    2013 	12 	1
    2014 	1 	1
    Comme vous pouvez le voir, cela concerne 3 mois en 2012, 12 mois en 2013, et juste le 1er mois de 2014.

    Le but, obtenir un graphique avec l'évolution du nombre de projets par mois et par année, exemple :


    Les couleurs représentent les années, A, B, C les mois...

    La requête est bonne, le code du graphiques est bons aussi. Il me reste juste à obtenir 1 tableau par année. Et surtout, si le mois n'existe pas, par exemple Mai 2012 ou Mai 2014, mettre un beau ZERO et ne pas faire déconner avec un NULL.

    Je voulais savoir par où partir pour obtenir ça ?
    Je me tire les cheveux avec des boucles FOR imbriquées... J'ai lancé du Foreach... Mais je n'arrive à rien !!!
    Puis-je avoir une piste ???

    Merci à vous !
    Dernière modification par Celira ; 06/01/2014 à 16h08.

  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
    Il me reste juste à obtenir 1 tableau par année.
    tu veux dire une table HTML avec les données ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour, tu peux construire un tableau en fonction du mois :

    Code php : 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
     
     
    <?php
     
    while ($row = $query_total_projets->fetch()) {
        for( $i = 1; $i <= 12 ; $i++ ) {//pour tous les mois de l'année
         if(  $row['mois'] == $i ) {
           $tab[$row['annee']][ $row['mois']] =  $row['total_projet'];
         }else{ //pour tous les mois n'ayant aucun projet
           $tab[$row['annee']][$i] =  0;
         }
       }
     
    }
     
    var_dump($tab);

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'avais tenté la construction en fonction du mois, par contre, je n'avais pas pensé à mettre le O avec une condition ELSE.

    Par contre, le résultat donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [2012] => Array ( [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 21 ) [2013] => Array ( [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 1 ) [2014] => Array ( [1] => 1 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 0 ) )
    Il me renvoi des zéro en 2013 alors qu'il n'y en a aucun.

    Pour répondre à sabotage, non je souhaite que mon Array que je récupère dans le while, se transforme en 3 array. 1 par année.
    Derrière, je dois afficher un graphique avec 3 tableaux distincts pour chaque année avec 12 mois (0 si valeur null).
    D'ailleurs Sabotage, tu m'avais été sur problème similaire pour sortir les données en Array. La difficulté ici, je sors bien le 1ère Array, en partie grâce à toi et quelqu'un d'autre. Mais dans ce cas, je dois en obtenir 3 distincts.
    Enfin 3 car de 2012 à 2014 mais le script doit s'adapter en 2015.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    mince l'algo ne prenait en compte que le dernier mois, essaies ceci:
    Code php : 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 = $query_total_projets->fetch()) {
        for( $i = 1; $i <= 12 ; $i++ ) {//pour tous les mois de l'année
         if(  $row['mois'] != $i ) {
              $tab[$row['annee']][$i] =  0;
         }
       }
     $tab[$row['annee']][ $row['mois']] =  $row['total_projet'];
     
     
    }
    var_dump($tab);

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(3) { [2012]=> array(12) { [1]=> int(0) [2]=> int(0) [3]=> int(0) [4]=> int(0) [5]=> int(0) [6]=> int(0) [7]=> int(0) [8]=> int(0) [10]=> int(0) [11]=> int(0) [12]=> string(2) "21" [9]=> int(0) } [2013]=> array(12) { [2]=> int(0) [3]=> int(0) [4]=> int(0) [5]=> int(0) [6]=> int(0) [7]=> int(0) [8]=> int(0) [9]=> int(0) [10]=> int(0) [11]=> int(0) [12]=> string(1) "1" [1]=> int(0) } [2014]=> array(12) { [2]=> int(0) [3]=> int(0) [4]=> int(0) [5]=> int(0) [6]=> int(0) [7]=> int(0) [8]=> int(0) [9]=> int(0) [10]=> int(0) [11]=> int(0) [12]=> int(0) [1]=> string(1) "1" } }
    Y'a un souci, après le 12, il repart pour 1 tour ! C'est bizarre.. C'est bien de 1 à 12 compris pourtant

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    $mois_vide = array_fill(1, 12, 0);
     
    while ($row = $query_total_projets->fetch()) {
      if (!isset($tab[$row['annee']]) {
           $tab[$row['annee']] = $mois_vide;
      }
     $tab[$row['annee']][ $row['mois']] =  $row['total_projet'];
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ta solution me renvoi ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [2012] => Array ( [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 4 [10] => 13 [11] => 26 [12] => 21 ) [2013] => Array ( [1] => 13 [2] => 9 [3] => 23 [4] => 40 [5] => 51 [6] => 32 [7] => 45 [8] => 18 [9] => 36 [10] => 39 [11] => 30 [12] => 1 ) [2014] => Array ( [1] => 1 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 0 ) )
    J'ai donc un beau tableau comme il faut près à incrémenter le graphique ! Pour info, il manque juste une ")" sur la ligne du IF.

    Merci pour ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tableau intersection de tableaux
    Par raph707 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 16/02/2015, 23h58
  2. [iText] Tableau contenant des tableaux
    Par drizztoli dans le forum Documents
    Réponses: 2
    Dernier message: 01/09/2010, 21h51
  3. tableau dynamique de tableaux statiques?
    Par spin6 dans le forum Débuter
    Réponses: 1
    Dernier message: 14/12/2008, 19h47
  4. [Tableaux] Diviser un tableau en sous-tableaux
    Par fayred dans le forum Langage
    Réponses: 5
    Dernier message: 18/03/2008, 16h56
  5. tableau dynamique de tableaux statiques.
    Par RaphAstronome dans le forum C++
    Réponses: 2
    Dernier message: 18/02/2007, 14h43

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