Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1958 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2161680
maxredphen​ix
Posté le 27-10-2012 à 22:35:52  profilanswer
 

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
mood
Publicité
Posté le 27-10-2012 à 22:35:52  profilanswer
 

n°2162399
Pascal le ​nain
Posté le 03-11-2012 à 13:25:19  profilanswer
 

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
n°2162891
Fux91
Posté le 07-11-2012 à 09:54:16  profilanswer
 

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 ?

n°2162892
yellu
Posté le 07-11-2012 à 10:04:36  profilanswer
 

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
n°2163116
maxredphen​ix
Posté le 07-11-2012 à 21:12:02  profilanswer
 

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

n°2163352
maxredphen​ix
Posté le 10-11-2012 à 10:37:08  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
Problème affichage tableau de taille variableProblème Connection MySQL sur mon VPS
page HTML pour centrer verticalemetn plusieurs objetstri tableau associatif JavaScript
Difficultés MysqlCréation BDD
Résolution d'un algo[tableau en java]créer un "pop-up interne" dans une page html
[JAVA] Compter nombre de fois caractère dans un tableauCréation BDD sur PCs clients
Plus de sujets relatifs à : Création d'un tableau html (lignes + colonnes) avec mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR