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

Résolu
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012 - 25 oct. 2012 à 19:25
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012 - 9 nov. 2012 à 21:58
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").
<col style= \"width:70%\"><col style=\"width:30%\">
----

 Matériel  |
Nbre |

<?php
$reqEnsemble =mysql_query(\"SELECT type_ensemble AS ENSEMBLE, COUNT(element) AS NBRE_ELEMENT
FROM inventaire
GROUP BY ENSEMBLE ORDER BY ENSEMBLE\") or die(mysql_error());
while ($req1 = mysql_fetch_assoc($reqEnsemble)) {
echo '----
';
echo ''.htmlentities($req1['ENSEMBLE']).', ';
echo ''.htmlentities($req1['NBRE_ELEMENT']).', ';
echo '';
$ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
$reqElement=mysql_query(\"SELECT type_ensemble AS ENSEMBLE, COUNT(element) AS NBRE_ELEMENT, element AS ELEMENT
FROM inventaire
WHERE type_ensemble = '$ensemble'
GROUP BY ELEMENT ORDER BY ENSEMBLE\");
while ($req2 = mysql_fetch_assoc($reqElement)) {
echo '----
';
echo ''.htmlentities($req2['ELEMENT']).', ';
echo ''.htmlentities($req2['NBRE_ELEMENT']).', ';
echo '';
}
}
?>



Ce qui donne:


Maintenant j'aimerai avoir ce même tableau mais en prenant en compte les bâtiments afin d'avoir ceci:


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.

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

19 réponses

Voici, je pense que cela fonctionnera :
<?php
$host =  "localhost"; 
$user = "root"; 
$passwd = ""; 
$database = "test";
// Requête de connexion
$link = mysql_connect($host, $user,$passwd);
mysql_query("SET NAMES UTF8");
// Vérification de la connexion à la BDD
if(!$link){die('Erreur de connexion au serveur');}
$select_db = mysql_select_db($database);
if(!$select_db){die('Erreur de connexion à la base');}

$nbrebatiment=mysql_query("SELECT nom_batiment AS BATIMENT FROM inventaire GROUP BY nom_batiment") or die(mysql_error());$nbre= mysql_num_rows($nbrebatiment);

echo '';
echo '----

 Matériel  |
Nbre par Bâtiment |
';
$Q  = \"SELECT type_ensemble AS TYP FROM inventaire GROUP BY TYP\";
$R = mysql_query($Q)or die(mysql_error());
while($A = mysql_fetch_assoc($R)) {
echo '----
'.$A['TYP'].', ';

$Q1 = \"SELECT nom_batiment AS BAT FROM inventaire GROUP BY BAT\";
$R1 = mysql_query($Q1)or die(mysql_error());
while($A1 = mysql_fetch_assoc($R1)) {
echo ''.$A1['BAT'].', ';
}
echo '----
';

$Q2 = \"SELECT element AS ELE FROM inventaire GROUP BY ELE\";
$R2 = mysql_query($Q2)or die(mysql_error());
while ($A2 = mysql_fetch_assoc($R2)) {
echo ''.$A2['ELE'].', ';
$R3 = mysql_query($Q1)or die(mysql_error());
while($A3 = mysql_fetch_assoc($R3)) {
$Q4 = \"SELECT SUM(nombre) AS NB FROM inventaire WHERE nom_batiment='\".$A3['BAT'].\"' AND element='\".$A2['ELE'].\"' AND type_ensemble='\".$A['TYP'].\"'\";
$R4 = mysql_query($Q4)or die(mysql_error());
while($A4 = mysql_fetch_assoc($R4)) {
if(isset($A4['NB'])) {
echo ''.$A4['NB'].', ';
}
else {
echo '0, ';
}
}
}
echo '';
}
}
echo '
';

?>




Cordialement,

JéjéScript.

Si on ne réussi pas du premier coup, il faut se rappeler que le grand chêne aussi au début était un gland !
3
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
27 oct. 2012 à 10:28
Bonjour,

Toujours personne?

Merci
0
Bonjour,
Je pense que tu trouvera ta réponse
en suivant ce lien :
http://dev.mysql.com/doc/refman/5.0/fr/group-by-modifiers.html
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
29 oct. 2012 à 17:52
Bonsoir,

Merci pour ta réponse,

Cela tombe bien, j'étais en train de chercher comment faire un total de tout mes résultats: WITH ROLLUP : merci

En fait, c'est pas réellement la requête qui m'embête, mais comment faire pour avoir l'affichage de cette requête dans un tableau, j'arrive pas à créer une boucle dans mon code php qui me permettrai de faire ce type de tableau.

Encore merci pour ton aide et pour le lien (il m'a bien aider celui la )

Bonne soirée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Si je ne me trompe pas tu as deux choix :

while et each :
while (list($key, $value) = each($arr)) {
    echo "Clé : $key; Valeur : $value
\n";
}


foreach :
foreach ($arr as $key => $value) {
    echo "Clé : $key; Valeur : $value
\n";
}


mais il faudra utiliser :
mysql_fetch_array
0
tu peux également faire comme ça, je n'ai fait que le début mais ça te donnera une idée pour la suite :


<col style= \"width:70%\"><col style=\"width:30%\">
----

 Matériel  |
Nbre |

<?php
include('config.php');
$reqEnsemble =mysql_query(\"SELECT type_ensemble AS ENSEMBLE, COUNT(element) AS NBRE_ELEMENT

FROM inventaire
GROUP BY ENSEMBLE ORDER BY ENSEMBLE\") or die(mysql_error());

while ($req1 = mysql_fetch_assoc($reqEnsemble)) {
echo '----
';
echo ''.htmlentities($req1['ENSEMBLE']).', ';
$ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
$reqbat=mysql_query(\"SELECT nom_batiment AS BATIMENT FROM inventaire WHERE type_ensemble='\".$ensemble.\"' GROUP BY BATIMENT ORDER BY BATIMENT\") or die(mysql_error());
while($bat= mysql_fetch_assoc($reqbat)) {
echo ''.htmlentities($bat['BATIMENT']).', ';
}
echo '';
$ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
$reqElement=mysql_query(\"SELECT type_ensemble AS ENSEMBLE, COUNT(element) AS NBRE_ELEMENT, element AS ELEMENT

FROM inventaire
WHERE type_ensemble = '$ensemble'
GROUP BY ELEMENT ORDER BY ENSEMBLE\");

while ($req2 = mysql_fetch_assoc($reqElement)) {
echo '----
';
echo ''.htmlentities($req2['ELEMENT']).', ';
echo ''.htmlentities($req2['NBRE_ELEMENT']).', ';
echo '';
}
}
?>
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
2 nov. 2012 à 22:53
Merci pour ta réponse et désolé pour le retard j'avais un problème de connexion internet

Je vais regarder ton code ce weeke end et je te tiens au courant

Encore merci pour ton aide et bon week end.
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
5 nov. 2012 à 09:42
Bonjour,

J'ai regardé ton code et modifié quelques lignes (déjà j'avais pas le nombre réel d'élément affiché ). Voila ce que donne le code dans le navigateur:


Le code:
<?php
$host =  "localhost"; 
$user = "root"; 
$passwd = ""; 
$database = "test";
// Requête de connexion
$link = mysql_connect($host, $user,$passwd);
mysql_query("SET NAMES UTF8");
// Vérification de la connexion à la BDD
if(!$link){die('Erreur de connexion au serveur');}
$select_db = mysql_select_db($database);
if(!$select_db){die('Erreur de connexion à la base');}
?>
<?php
$nbrebatiment=mysql_query(\"SELECT nom_batiment AS BATIMENT FROM inventaire GROUP BY nom_batiment\") or die(mysql_error());$nbre= mysql_num_rows($nbrebatiment);
?>
----

 Matériel  |
" style ="color: RGB(0, 0, 100%); background-color:#8CC6D7;">Nbre par Bâtiment |

<?php
// Requête 1 : les ensembles
$reqEnsemble=mysql_query(\"SELECT type_ensemble AS ENSEMBLE, COUNT(element) AS NBRE_ELEMENT
FROM inventaire
GROUP BY ENSEMBLE ORDER BY ENSEMBLE\") or die(mysql_error());
// Boucle 1: On détermine chaque ensemble
while ($req1 = mysql_fetch_assoc($reqEnsemble)) {
echo '----
';
// On affiche le nom du 1er ensemble
echo ''.htmlentities($req1['ENSEMBLE']).', ';
// La variable $ensemble = nom du l'ensemble de la première requête / Boucle 1
$ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
// Requête 2 : On détermine le nom des bâtiments correspondant à l'ensemble de la boucle 1
$reqbat=mysql_query(\"SELECT nom_batiment AS BATIMENT FROM inventaire WHERE type_ensemble='\".$ensemble.\"' GROUP BY BATIMENT ORDER BY BATIMENT\") or die(mysql_error());
// Boucle 2: Affichage des batiments dans l'ensemble
while($bat= mysql_fetch_assoc($reqbat)) {
echo ''.htmlentities($bat['BATIMENT']).', ';
}
echo '';
// On re-défini la variable $ensemble
$ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
// Requête 3 :  On détermine les éléments et leurs nombres
$reqElement=mysql_query(\"SELECT type_ensemble AS ENSEMBLE, nombre AS NBRE_ELEMENT, element AS ELEMENT
FROM inventaire
WHERE type_ensemble = '$ensemble'
GROUP BY ELEMENT ORDER BY ENSEMBLE\");
// Boucle 3: Affichage de la requête 3
while ($req2 = mysql_fetch_assoc($reqElement)) {
echo '----
';
echo ''.htmlentities($req2['ELEMENT']).', ';
echo ''.htmlentities($req2['NBRE_ELEMENT']).', ';
echo '';
}
}
?>

Bon il reste encore quelques modif à 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
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
9 nov. 2012 à 15:31
J'arrive pas à créer ce côté multidimensionnel dans mon tableau, j'ai tenté pas mal de chose mais cela ne change rien, j'ai toujours un affichage unique dans la 1ere colonne des bâtiments.

Qu'est ce que tu en penses?

Merci
0
Je regarde ça de plus près et je te donne une réponse.

Cordialement,

JéjéScript.

Si on ne réussi pas du premier coup, il faut se rappeler que le grand chêne aussi au début était un gland !
0
Alors si j'ai bien compris, ceci devrait fonctionner :
<?php
$host =  "localhost"; 
$user = "root"; 
$passwd = ""; 
$database = "test";
// Requête de connexion
$link = mysql_connect($host, $user,$passwd);
mysql_query("SET NAMES UTF8");
// Vérification de la connexion à la BDD
if(!$link){die('Erreur de connexion au serveur');}
$select_db = mysql_select_db($database);
if(!$select_db){die('Erreur de connexion à la base');}
?>
<?php
$nbrebatiment=mysql_query(\"SELECT nom_batiment AS BATIMENT FROM inventaire GROUP BY nom_batiment\") or die(mysql_error());$nbre= mysql_num_rows($nbrebatiment);
?>
----

 Matériel  |
" style ="color: RGB(0, 0, 100%); background-color:#8CC6D7;">Nbre par Bâtiment |

<?php
// Requête 1 : les ensembles
$reqEnsemble=mysql_query(\"SELECT type_ensemble AS ENSEMBLE FROM inventaire GROUP BY ENSEMBLE ORDER BY ENSEMBLE\") or die(mysql_error());

// Boucle 1: On détermine chaque ensemble
while ($req1 = mysql_fetch_assoc($reqEnsemble)) {
echo '----
';
// On affiche le nom du 1er ensemble
echo ''.htmlentities($req1['ENSEMBLE']).', ';
// La variable $ensemble = nom du l'ensemble de la première requête / Boucle 1
$ensemble = mysql_real_escape_string($req1['ENSEMBLE']);
// Requête 2 : On détermine le nom des bâtiments correspondant à l'ensemble de la boucle 1
$reqbat=mysql_query(\"SELECT nom_batiment AS BATIMENT FROM inventaire WHERE type_ensemble='\".$ensemble.\"' GROUP BY BATIMENT ORDER BY BATIMENT\") or die(mysql_error());
// Boucle 2: Affichage des batiments dans l'ensemble
while($bat= mysql_fetch_assoc($reqbat)) {
echo ''.htmlentities($bat['BATIMENT']).', ';
}
echo '';

// Requête 3 :  On détermine les éléments et leurs nombres
$reqElement=mysql_query(\"SELECT element AS ELEMENT FROM inventaire WHERE type_ensemble = '$ensemble' GROUP BY ELEMENT ORDER BY ELEMENT\");
// Boucle 3: Affichage de la requête 3
while ($req2 = mysql_fetch_assoc($reqElement)) {
$element = mysql_real_escape_string($req2['ELEMENT']);
echo '----
';
echo ''.htmlentities($req2['ELEMENT']).', ';
$reqNbElement =mysql_query(\"SELECT nombre AS NB FROM inventaire WHERE element='\".$element.\"' GROUP BY nom_batiment\");
while($NbElement = mysql_fetch_assoc($reqNbElement)) {
echo ''.$NbElement['NB'].', ';
}
echo '';
}
}
?>




Cordialement,

JéjéScript.

Si on ne réussi pas du premier coup, il faut se rappeler que le grand chêne aussi au début était un gland !
0
Il y a toujours un soucis d’alignement, je regarde ça.


Cordialement,

JéjéScript.

Si on ne réussi pas du premier coup, il faut se rappeler que le grand chêne aussi au début était un gland !
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
9 nov. 2012 à 17:43
Super merci de ton aide
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
9 nov. 2012 à 19:52
C'est tout simplement parfait,

Je vais regarder maintenant pour faire un autre tableau afin d'avoir seulement les ensembles/elements dans lesquels il y aurait au moins un bâtiment contenant un de ces derniers.

C'est vraiment sympa d'avoir consacré du temps pour m'aider.

Encore merci
0
si tu pouvais mettre résolu c'est toujours bien
a bientôt


Cordialement,

JéjéScript.

Si on ne réussi pas du premier coup, il faut se rappeler que le grand chêne aussi au début était un gland !
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
9 nov. 2012 à 20:53
Oups j'ai oublié
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
9 nov. 2012 à 20:58
-----------------------
---- Sujet résolu -----
-----------------------

_______Merci___________
0
si tu as besoin je te donnerai un coup de main


Cordialement,

JéjéScript.

Si on ne réussi pas du premier coup, il faut se rappeler que le grand chêne aussi au début était un gland !
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
9 nov. 2012 à 21:58
Merci d'avance ça me fait plaisir.

Bonne soirée
0
Rejoignez-nous