php problème tableau suite requête MySQL [résolu]

php problème tableau suite requête MySQL [résolu] - PHP - Programmation

Marsh Posté le 20-08-2013 à 10:18:55    

Bonjour à tous,
Je vous explique mon problème.
Je suis actuellement en stage dans une société qui ne compte aucun informaticien et là, ça fait 3 jours que je galère sur un tableau.
Pour exposer le sujet, je fais une requête MySQL avec la fonction query->. Jusque là, aucun soucis.
Ensuite je fais mon while avec mon fetch, et c'est là que ça se complique (pour moi).
 
Je travaille sur une base de données de poisson et de site de pêche.
Je dois récupérer tous les poissons qui ont été pêchés sur la station. (jusque là aucun problème non plus)
C'est maintenant que j'ai beaucoup de mal.
 
exemple d'affichage: p1 p2 p3 p4 p5 p6 p7 p8 p9    que je souhaiterais (en supprimant p7 aussi)
            année X1   1    0 10  6   3   0   0   7  6
            année X2   0    3  5   0   2   4   0   6  1
 
Or, on a essayé 2 solution.
Au départ la base de données ne comprenait que les poissons ayant été pêchés donc sur la première ligne j'obtenais 1  10  6  3  7  6  et la deuxième  3 5 2 4 6 1
Ca n'allait pas donc on a décidé de faire un tableau dynamique sous Excel et injecter les données avec des 0 sur les poissons non pêchés. (Je pensais que ca serait plus simple)
Maintenant ça m'affiche tous les poissons même ceux à 0.
Le problème est de supprimer tous les poissons n'ayant jamais été pêchés (donc ici le 7)
Donc faire une addition sur mes résultats. et c'est là que je bloque. N'ayant qu'une seule ligne de ma requête donc un seul tableau, je ne sais pas comment faire pour retirer les  
poissons jamais pêchés sur le site ( il y a 73 espèces). Je peux avoir une seule pêche ou plusieurs.
 
Partie du résultat que je récupère sous la forme d'un tableau en comprenant plusieurs.  
Array ( [date_operation] => 2010-05-20 [0] => 2010-05-20 [code_operation] => 87320000352 [1] => 87320000352 [ABH] => 0 [2] => 0 [ABL] => 0 [3] => 0 [ALA] => 0 [4] => 0 [ALF] => 0 [5] => 0 [ANG] => 1 [6] => 1 [APP] => 0 [7] => 0 [ASP] => 0 [8] => 0 [ATH] => 0 [9] => 0 [BAF] => 11 [10] => 11 [BBG] => 0 [11] => 0 [BOU] => 0 [12] => 0 [BRB] => 0 [13] => 0 [BRE] => 0 [14] => 0 [BRO] => 0 [15] => 0 [CAA] => 0 [16] => 0 [CAG] => 0 [17] => 0 [CAK] => 0 [18] => 0 [CAR] => 0 [19] => 0 [CAS] => 0 [20] => 0 [CCO] => 0 [21] => 0 [CCU] => 0 [22] => 0 [CHA] => 185 [23] => 185 [CHE] => 14 [24] => 14 [CMI] => 0 [25] => 0 [CTI] => 0 [26] => 0 [CYP] => 0 [27] => 0 [EPI] => 0 [28] => 0 [EPT] => 19 [29] => 19 [FLE] => 0 [30] => 0 [GAM] => 0 [31] => 0 [GAR] => 0 [32] => 0 [GOU] => 53 [33] => 53  
 
Voici mes parties de codes

Code :
  1. $total_poisson = $bdd ->query('SELECT O.date_operation , P.*
  2.           FROM PECHER_ABONDANCE P
  3.           NATURAL JOIN OPERATION O
  4.           WHERE code_wama_station = "'.$_SESSION['code_wama_session'].'" order by date_operation ');
  5.    while( $donnee_p = $total_poisson -> fetch()){
  6.     $annee_poisson = date('Y',strtotime($donnee_p['date_operation']));
  7.      $test = 0 ;
  8.      for($i = 0 ; $i < 73 ; $i++){
  9.       $test += $donnee_p[20][$i] ;
  10.      }
  11.    }
  12.      echo $test ;
  13. en commentaire car ne fonctionne pas terrible, c'était des test que j'ai conservé
  14.     /*for($i = 1 ; $i<73 ; $i++){
  15.      if($i == 1 )
  16.       echo date('Y',strtotime($donnee_p['date_operation']));
  17.      else{
  18.       $ang = $donnee_p[$i];  
  19.       echo " ".$ang." ";
  20.      }*/
  21.    //  while ( $tab_annee_civile > $o ) {
  22.   /*    for($i = 1 ; $i<73 ; $i++){
  23.        if($i == 1 )
  24.         echo date('Y',strtotime($donnee_p['date_operation']));
  25.        else{
  26.         $ang = $donnee_p[$i];  
  27.      //   echo " ".$ang." ";
  28.        }
  29.       }
  30.    //  }
  31.      
  32.      
  33.    }  
  34.   */


 
Merci d'avance pour toutes vos réponses


Message édité par pulpipi45 le 20-08-2013 à 12:24:12
Reply

Marsh Posté le 20-08-2013 à 10:18:55   

Reply

Marsh Posté le 20-08-2013 à 11:26:45    

Salut, essaye ça :
 

Code :
  1. $array = array();
  2.             $array_b = array();
  3. while( $donnee_p = $total_poisson -> fetch()){
  4.             foreach ($donnee_p as $key => $value) {
  5.                 if (!is_numeric($key)) {
  6.                     $array[$key] += $value;
  7.                     $array_b[date('Y', strtotime($donnee_p['date_operation']))][$key] = $value;
  8.                 }
  9.             }
  10. }
  11.             $head = "";
  12.             $body = "";
  13.             foreach ($array as $key => $value) {
  14.                 if ($value != 0)
  15.                     $head .= "<th>$key</th>";
  16.             }
  17.             $line = "";
  18.             foreach ($array_b as $key => $value) {
  19.                 $line .= "<tr>";
  20.                 foreach ($value as $value2) {
  21.                     $line .= "<td>$value2</td>";
  22.                 }
  23.                 $line .= "</tr>";
  24.             }
  25.             $table = "<table><thead><tr>$head</tr></thead><tbody>$line></tbody></table>";
  26. (edit) echo $table;


Message édité par sltpaulo le 20-08-2013 à 11:27:33
Reply

Marsh Posté le 20-08-2013 à 11:39:29    

re.
Merci pour ta rapidité de réponse.
Voici le message d'erreur. CCO correspond à une espèce. J'ai ce message pour toutes mes espèces de poissons. et je ne vois pas pourquoi. Je vais encore jeté un coup d'oeil a cet endroit la.  
 
( ! ) Notice: Undefined index: CCO in C:\wamp\www\01_08\src\composition.php on line 222
Sur le code ci-dessus, ça correspond a la ligne 6
 
Par contre nouveauté, Tout s'affiche. Merci


Message édité par pulpipi45 le 20-08-2013 à 11:40:21
Reply

Marsh Posté le 20-08-2013 à 12:02:28    

Re, nje teste pas le code, je l'écris en bloc donc c'est juste des idées, mais effectivement, j'ai oublié un truc
 

Code :
  1. foreach ($array_b as $key => $value) {
  2.                 $line .= "<tr>";
  3. -->                foreach ($value as $key2 =>$value2) {
  4. --->                  if($array[$key2] != 0)
  5.                             $line .= "<td>$value2</td>";
  6.                 }
  7.                 $line .= "</tr>";
  8.             }


 
 
edit :  tu peux aussi mettre des guillemets sur certaines variables pour spécifier que c'est un string mais normalement tu as pas besoin :

Code :
  1. //example
  2. f($array["$key2"] != 0)


Message édité par sltpaulo le 20-08-2013 à 12:05:17
Reply

Marsh Posté le 20-08-2013 à 12:22:38    

re
J'ai toujours ce message mais je vais chercher.
Après 3 jours la dessus, tu me dis que tu codes ça a l'aveugle et CA MARCHE. Ca énerve lol, mais bon maintenant faudra travailler pour avoir ton expérience. Je te remercie beaucoup, c'est exactement le résultat que je souhaité obtenir.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed