Création d'un tableau html (lignes + colonnes) avec mysql

Création d'un tableau html (lignes + colonnes) avec mysql - PHP - Programmation

Marsh Posté le 27-10-2012 à 22:35:52    

Bonjour à tous,  
 
Voila j'ai une table dans une bdd mysql me servant à gérer du matériel, elle se compose de la manière suivante:  
id, element, type_ensemble, nom_batiment, nombre  
 
A l'heure actuelle j'ai le code suivant pour afficher le nombre total d'element et en plus trié par catégorie (appelée "type_ensemble" ).  
Code PHP :

Code :
  1. <table border="1" cellspacing="0" style="width:35%" align="center" charset="utf-8">
  2. <col style="width:70%"><col style="width:30%">
  3. <tr style="vertical-align: middle; text-align: center;">
  4.  <th style="background-color:#8CC6D7;">Matériel</th>
  5.  <th style="color: RGB(0, 0, 100%); background-color:#8CC6D7;">Nbre</th>
  6. </tr>
  7. <?php
  8.  $reqEnsemble=mysql_query("SELECT type_ensemble AS ENSEMBLE, COUNT(element) AS NBRE_ELEMENT
  9.         FROM inventaire
  10.         GROUP BY ENSEMBLE ORDER BY ENSEMBLE" ) or die(mysql_error());
  11.  while ($req1 = mysql_fetch_assoc($reqEnsemble)) {
  12.   echo '<tr style="background-color: #EDF7F2; color: blue;">';
  13.   echo '<td align="center" style="background-color: #C4FCCA">'.htmlentities($req1['ENSEMBLE']).'</td>';
  14.   echo '<td align="center" style="background-color: #C4FCCA">'.htmlentities($req1['NBRE_ELEMENT']).'</td>';
  15.   echo '</tr>';
  16.   $ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
  17.   $reqElement=mysql_query("SELECT type_ensemble AS ENSEMBLE, COUNT(element) AS NBRE_ELEMENT, element AS ELEMENT
  18.         FROM inventaire
  19.         WHERE type_ensemble = '$ensemble'
  20.         GROUP BY ELEMENT ORDER BY ENSEMBLE" );
  21.   while ($req2 = mysql_fetch_assoc($reqElement)) {
  22.    echo '<tr>';
  23.    echo '<td style="font-size:12px; text-align:right">'.htmlentities($req2['ELEMENT']).'</td>';
  24.    echo '<td align=center>'.htmlentities($req2['NBRE_ELEMENT']).'</td>';
  25.    echo '</tr>';
  26.   }
  27.  }
  28. ?>
  29. </table>


 
Ce qui donne:  
http://dl.dropbox.com/u/31901874/tableau%20multidimension1.jpg
 
Maintenant j'aimerai avoir ce même tableau mais en prenant en compte les bâtiments afin d'avoir ceci:  
http://dl.dropbox.com/u/31901874/Copie%20site%20pour%20forum/tableau%20multidimension.jpg
 
Le but est de créer automatiquement les colonnes avec les divers bâtiments enregistrés dans la table, bien sur il faut modifier les 2 requêtes des lignes pour afficher la bonne valeur dans la bonne colonne  ;) .  
 
Malheureusement je vois pas comment je peux rajouter les bâtiments dans les colonnes, j'ai tenter avec un foreach mais.... rien.  :fou:  
 
Est-ce que quelqu'un aurait une idée pour faire cela parce que j'ai fouiller sur le net avant de poser cette question mais j'ai rien trouvé.  
 
Merci d'avance pour votre aide  
 
maxredphenix


Message édité par maxredphenix le 27-10-2012 à 22:36:12
Reply

Marsh Posté le 27-10-2012 à 22:35:52   

Reply

Marsh Posté le 03-11-2012 à 13:25:19    

Comme ca a froid, je te dirais de faire une requete par batiment. Il y a peut etre plus concis en une seule requete, mais je vois pas trop  :na:


Message édité par Pascal le nain le 03-11-2012 à 13:26:22
Reply

Marsh Posté le 07-11-2012 à 09:54:16    

Bonjour !  
 
J'ai exactement le même problème, pas pour les mêmes données, mais l'idée est tout pareil, quelqu'un ?

Reply

Marsh Posté le 07-11-2012 à 10:04:36    

Salut,  
En une requête je verrais un truc de ce genre la :
 

Code :
  1. SELECT *
  2. FROM (
  3. SELECT
  4.  type_ensemble AS ENSEMBLE,
  5.  NULL as ELEMENT,
  6.  COUNT(element) AS NBRE_ELEMENT
  7. FROM inventaire
  8. GROUP BY
  9.  ENSEMBLE ,
  10.  ELEMENT
  11. UNION
  12. SELECT
  13.  type_ensemble AS ENSEMBLE,
  14.  element AS ELEMENT,
  15.  COUNT(element) AS NBRE_ELEMENT
  16. FROM inventaire
  17. GROUP BY
  18.  ENSEMBLE,
  19.  ELEMENT
  20. ) T
  21. ORDER BY ENSEMBLE, ELEMENT


Message édité par yellu le 07-11-2012 à 10:06:19
Reply

Marsh Posté le 07-11-2012 à 21:12:02    

Bonsoir,
 
Désolé pour le retard je n'avais plus d'ADSL   :fou: .
 
Merci à tous les 2 pour vos réponses, je vais regarder ta requête Yellu. Entre temps j'ai fais ceci:

Code :
  1. <?php
  2. $host = "localhost";
  3. $user = "root";
  4. $passwd = "";
  5. $database = "test";
  6. // Requête de connexion
  7. $link = mysql_connect($host, $user,$passwd);
  8. mysql_query("SET NAMES UTF8" );
  9. // Vérification de la connexion à la BDD
  10. if(!$link){die('Erreur de connexion au serveur');}
  11. $select_db = mysql_select_db($database);
  12. if(!$select_db){die('Erreur de connexion à la base');}
  13. ?>
  14. <table border="1" cellspacing="0" style="width:35%" align="center" charset="utf-8">
  15. <?php
  16.  $nbrebatiment=mysql_query("SELECT nom_batiment AS BATIMENT FROM inventaire GROUP BY nom_batiment" ) or die(mysql_error());$nbre= mysql_num_rows($nbrebatiment);
  17. ?>
  18. <tr style="vertical-align: middle; text-align: center;">
  19.  <th style="background-color:#8CC6D7;">Matériel</th>
  20.  <th colspan="<?php echo $nbre ?>" style="color: RGB(0, 0, 100%); background-color:#8CC6D7;">Nbre par Bâtiment</th>
  21. </tr>
  22. <?php
  23.  // Requête 1 : les ensembles
  24.  $reqEnsemble=mysql_query("SELECT type_ensemble AS ENSEMBLE, COUNT(element) AS NBRE_ELEMENT
  25.         FROM inventaire
  26.         GROUP BY ENSEMBLE ORDER BY ENSEMBLE" ) or die(mysql_error());
  27.  // Boucle 1: On détermine chaque ensemble
  28.  while ($req1 = mysql_fetch_assoc($reqEnsemble)) {
  29.   echo '<tr style="background-color: #EDF7F2; color: blue;">';
  30.   // On affiche le nom du 1er ensemble
  31.   echo '<td align="center" style="background-color: #C4FCCA">'.htmlentities($req1['ENSEMBLE']).'</td>';
  32.   // La variable $ensemble = nom du l'ensemble de la première requête / Boucle 1
  33.   $ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
  34.   // Requête 2 : On détermine le nom des bâtiments correspondant à l'ensemble de la boucle 1
  35.   $reqbat=mysql_query("SELECT nom_batiment AS BATIMENT FROM inventaire WHERE type_ensemble='".$ensemble."' GROUP BY BATIMENT ORDER BY BATIMENT" ) or die(mysql_error());
  36.   // Boucle 2: Affichage des batiments dans l'ensemble
  37.   while($bat= mysql_fetch_assoc($reqbat)) {
  38.    echo '<td align="center" style="background-color: #C4FCCA">'.htmlentities($bat['BATIMENT']).'</td>';
  39.   }
  40.   echo '</tr>';
  41.   // On re-défini la variable $ensemble
  42.   $ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
  43.   // Requête 3 :  On détermine les éléments et leurs nombres
  44.   $reqElement=mysql_query("SELECT type_ensemble AS ENSEMBLE, nombre AS NBRE_ELEMENT, element AS ELEMENT
  45.         FROM inventaire
  46.         WHERE type_ensemble = '$ensemble'
  47.         GROUP BY ELEMENT ORDER BY ENSEMBLE" );
  48.   // Boucle 3: Affichage de la requête 3
  49.   while ($req2 = mysql_fetch_assoc($reqElement)) {
  50.    echo '<tr>';
  51.    echo '<td style="font-size:12px; text-align:right">'.htmlentities($req2['ELEMENT']).'</td>';
  52.    echo '<td align=center>'.htmlentities($req2['NBRE_ELEMENT']).'</td>';
  53.    echo '</tr>';
  54.   }
  55.  }
  56. ?>
  57. </table>


 
 
Ce qui donne:
http://dl.dropbox.com/u/31901874/Copie%20site%20pour%20forum/screenshot.jpg
 
Bon il reste encore quelques modifications à faire parce que les chiffres s'affichent que dans la première colonne bâtiment (qui n'est pas forcement la bonne en plus, pour exemple il y a pas d'interphone dans le Bt020 dans ma bdd).  
 
Mais bon ça avance un peu, il reste à trouver le moyen de faire l'affichage des "nombres" de la dernière requête dans la colonne "bâtiment" correspondante....  
 
Merci

Reply

Marsh Posté le 10-11-2012 à 10:37:08    

Au cas ou ça pourrait aider quelqu'un d'autre, voila le code permettant de faire mon tableau:

Code :
  1. <?php
  2. $host = "localhost";
  3. $user = "root";
  4. $passwd = "";
  5. $database = "test";
  6. // Requête de connexion
  7. $link = mysql_connect($host, $user,$passwd);
  8. mysql_query("SET NAMES UTF8" );
  9. // Vérification de la connexion à la BDD
  10. if(!$link){die('Erreur de connexion au serveur');}
  11. $select_db = mysql_select_db($database);
  12. if(!$select_db){die('Erreur de connexion à la base');}
  13. $nbrebatiment=mysql_query("SELECT nom_batiment AS BATIMENT FROM inventaire GROUP BY nom_batiment" ) or die(mysql_error());$nbre= mysql_num_rows($nbrebatiment);
  14. echo '<table align="center">';
  15. echo '<tr style="vertical-align: middle; text-align: center;">
  16.  <th style="background-color:#8CC6D7;">Matériel</th>
  17.  <th colspan="'.$nbre.'" style="color: RGB(0, 0, 100%); background-color:#8CC6D7;">Nbre par Bâtiment</th>
  18. </tr>';
  19. $Q = "SELECT type_ensemble AS TYP FROM inventaire GROUP BY TYP";
  20. $R = mysql_query($Q)or die(mysql_error());
  21. while($A = mysql_fetch_assoc($R)) {
  22.  echo '<tr style="background-color: #EDF7F2; color: blue;"><td align="center" style="background-color: #C4FCCA">'.$A['TYP'].'</td>';
  23.  $Q1 = "SELECT nom_batiment AS BAT FROM inventaire GROUP BY BAT";
  24.  $R1 = mysql_query($Q1)or die(mysql_error());
  25.  while($A1 = mysql_fetch_assoc($R1)) {
  26.   echo '<td align="center" style="background-color: #C4FCCA">'.$A1['BAT'].'</td>';
  27.  }
  28.  echo '</tr><tr>';
  29.  $Q2 = "SELECT element AS ELE FROM inventaire WHERE type_ensemble='".$A['TYP']."' GROUP BY ELE";
  30.  $R2 = mysql_query($Q2)or die(mysql_error());
  31.  while ($A2 = mysql_fetch_assoc($R2)) {
  32.   echo '<td style="font-size:12px; text-align:right">'.$A2['ELE'].'</td>';
  33.   $R3 = mysql_query($Q1)or die(mysql_error());
  34.   while($A3 = mysql_fetch_assoc($R3)) {
  35.    $Q4 = "SELECT SUM(nombre) AS NB FROM inventaire WHERE nom_batiment='".$A3['BAT']."' AND element='".$A2['ELE']."' AND type_ensemble='".$A['TYP']."'";
  36.    $R4 = mysql_query($Q4)or die(mysql_error());
  37.    while($A4 = mysql_fetch_assoc($R4)) {
  38.     if(isset($A4['NB'])) {
  39.      echo '<td align="center">'.$A4['NB'].'</td>';
  40.     }
  41.     else {
  42.      echo '<td align="center">0</td>';
  43.     }
  44.    }
  45.   }
  46.   echo '</tr>';
  47.  }
  48. }
  49. echo '</table>';
  50. ?>


 
A bientot

Reply

Sujets relatifs:

Leave a Replay

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