Création d'un tableau html (lignes + colonnes) avec mysql [Résolu]

maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 25 oct. 2012 à 19:25 - Dernière réponse : maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
JejeScript - 9 nov. 2012 à 19:33
3
Merci
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 !

Merci JejeScript 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de JejeScript
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 27 oct. 2012 à 10:28
0
Merci
Bonjour,

Toujours personne?

Merci
Commenter la réponse de maxredphenix
JejeScript - 29 oct. 2012 à 00:48
0
Merci
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
Commenter la réponse de JejeScript
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 29 oct. 2012 à 17:52
0
Merci
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
Commenter la réponse de maxredphenix
JejeScript - 1 nov. 2012 à 04:48
0
Merci
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
Commenter la réponse de JejeScript
JejeScript - 1 nov. 2012 à 20:34
0
Merci
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 '';
}
}
?>
Commenter la réponse de JejeScript
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 2 nov. 2012 à 22:53
0
Merci
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.
Commenter la réponse de maxredphenix
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 5 nov. 2012 à 09:42
0
Merci
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
Commenter la réponse de maxredphenix
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 9 nov. 2012 à 15:31
0
Merci
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
Commenter la réponse de maxredphenix
JejeScript - 9 nov. 2012 à 16:25
0
Merci
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 !
Commenter la réponse de JejeScript
JejeScript - 9 nov. 2012 à 16:57
0
Merci
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 !
Commenter la réponse de JejeScript
JejeScript - 9 nov. 2012 à 17:04
0
Merci
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 !
Commenter la réponse de JejeScript
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 9 nov. 2012 à 17:43
0
Merci
Super merci de ton aide
Commenter la réponse de maxredphenix
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 9 nov. 2012 à 19:52
0
Merci
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
Commenter la réponse de maxredphenix
JejeScript - 9 nov. 2012 à 19:57
0
Merci
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 !
Commenter la réponse de JejeScript
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 9 nov. 2012 à 20:53
0
Merci
Oups j'ai oublié
Commenter la réponse de maxredphenix
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 9 nov. 2012 à 20:58
0
Merci
-----------------------
---- Sujet résolu -----
-----------------------

_______Merci___________
Commenter la réponse de maxredphenix
JejeScript - 9 nov. 2012 à 21:46
0
Merci
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 !
Commenter la réponse de JejeScript
maxredphenix 58 Messages postés vendredi 8 septembre 2006Date d'inscription 9 novembre 2012 Dernière intervention - 9 nov. 2012 à 21:58
0
Merci
Merci d'avance ça me fait plaisir.

Bonne soirée
Commenter la réponse de maxredphenix

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.