fredo35m
Messages postés244Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention12 juillet 2006
-
8 sept. 2005 à 11:29
fredo35m
Messages postés244Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention12 juillet 2006
-
12 sept. 2005 à 14:22
Bonjour,
je ne m'y connais pas vraiment en tableau et je souhaiterais savoir comment effectué un tableau croisé en php, pour l'instant j'arrive à afficher mes colonnes et mes lignes mais j'aimerais croiser ma varaible1 avec ma variable 2 pour obtenir les effectifs 3
mysql_select_db($database_local, $local);
$query_Recordset1 = "SELECT * FROM sirene_petit GROUP BY $param1, $param2";
$Recordset1 = mysql_query($query_Recordset1, $local) or die(mysql_error());
?>
fredo35m
Messages postés244Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention12 juillet 2006 8 sept. 2005 à 12:20
oui je pense que c'est ça !!!
En fait dans ma base mysql j'ai plusieurs variables que je souhaite croisé pour obtenir une valeur.
Exemple de variables : ville entreprise effectif
Et bien je souhaite afficher un tableau résumant les effectifs des villes pour chaque entreprise
Entreprise
Danone | Nestlé Total
Ville
Paris 15 25 40
Rennes 12 10 22
Total 27 35 62
Voici le genre de tableau que je souhaiterais produire.
Pour l'instant les tableau que je produit sont :
Ville Entreprise Effectif
Paris Danone 15
Paris Nestlé 25
Rennes Danone 12
Rennes nestlé 10
Je sais pas si le tableau rend quelque chose mais bon ...
En fait mon but est de croisé 2 variable (ou plus) mais bon on va déjà ce limité à deux pour obtenir une valeur d'une troisième.
Depuis toute à l'heure j'arrive bien à afficher ça si je reprends mon exemple (mais par contre il ne m'affiche pas (Paris, Rennes et les chiffres)!!
merci pour ton coup de main
Entreprise
Danone | Nestlé
Ville
fredo35m
Messages postés244Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention12 juillet 2006 8 sept. 2005 à 13:57
En fait ce que je veux faire, c'est de permettre à l'utilisateur d'interroger la base de données, selon ce qu'il souhaite voir s'afficher dans le tableau (dans mon exemple il sélectionne ville, entreprise, effectif).
et donc je souhaite préparer un tableau permettant d'inclure les données de ma base de données. Ensuite si l'utilisateur souhaite un autre variable il a juste à sélectionner dans un menu déroulant la variable à insérer.
Mon principal problème est de savoir comment organisé (structuré) mon tableau pour qu'il affiche les résultats escomptés.
Mais je sais pas si je suis vraiment clair dans ma demande en fait ...!!
il s'agit principalement d'une présentation de résultat sous une forme de tableau croisé.
meric en tout cas
Vous n’avez pas trouvé la réponse que vous recherchez ?
fredo35m
Messages postés244Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention12 juillet 2006 8 sept. 2005 à 14:35
En plus je viens de m'apercevoir que même mon premier formulaire avec les données en colonne n'est pas bon !! j'y comprends plus rien !!! j'suis une buse !!!
il ne m'affiche plus rien maintenant !!! alors que je veux juste qu'il fasse la somme en fonction de mes 2 premiers paramètres !!!
Je remets mon code modifié en grand désespoir là !!! j'y comprends plus rien !! mon but est d'afficher la somme du paramètre 3 en fonction des daparamètre 1 et 2!!!
mysql_select_db($database_local, $local);
$query_Recordset1 = "SELECT SUM($param3) FROM sirene_petit GROUP BY $param1, $param2";
$Recordset1 = mysql_query($query_Recordset1, $local) or die(mysql_error());
$query_Recordset2 = "SELECT * FROM sirene_petit GROUP BY $param1, $param2";
$Recordset2 = mysql_query($query_Recordset2, $local) or die(mysql_error());
?>
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 8 sept. 2005 à 17:52
Hmm ça va être difficile comme ça, dans la mesure où tout est dans une seule table.
Si je comprends bien, tu as des lignes ou tu as par exemple (je passe les autres champs hein) :
danone, paris, 12
danone, rennes, 10
c'est ça ? Donc 2 lignes pour Danone (ou Rennes).
Il aurait été plus logique de faire plusieurs tables. Simple réflexion : une table entreprise déjà..
Ensuite, une entreprise peut être dans 1 ou plusieurs villes. Peut-etre
(à toi de voir) qu'une ville, elle, ne peut contenir qu'1 seule
entreprise (je veux dire 1 Danone pour rennes, pas 2). Mais bon ptete
pas lol. Restons là-dessus.
Dans ce cas :
1 table villes, avec nom de la ville, id_ville.
1 table entreprise avec un id_entreprise.
1 table effectif, avec ud_ville, id_entreprise, et l'effectif.
Bon c'est à réfléchir avec tous tes champs...cherche "Methode Merise"
sur google, et lis un résumé de cette méthode, surtout les 6 cas pour
designer une base (ouais, y en a 6), en fonction des relations 1-n,
n-n, etc...
Bref après tu veux afficher ttes les entreprises et leur effectif pour la ville de Paris ?
SELECT effect, nom_entreprise FROM effectif ef, entreprise ent WHERE ef.id_ville =$tonchoixdeville
Tu as ta liste.
Après ça devient plus simple pour afficher tout ça comme tu le veux...
fredo35m
Messages postés244Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention12 juillet 2006 9 sept. 2005 à 09:08
Oui c'est clair qu'il aurait été mieux d'avoir plus tables, mais le jeu de données viens de l'extérieur et on peut rien y faire !!!
Donc oui, dans ma table je peux avoir plusieurs lignes pour une ville (en reprenant cet exemple), et mon but est par exemple d'afficher la somme des effectifs pour une ville donnée ou pour une entreprise donnée ou (principalement) présenté les données par un croisement c'est à dire que je souhaite afficher les effectifs des entreprises par region par exemple, c'est à dire en ligne on pourrais imaginer l'ensemble des villes de la region et en colonne l'ensemble des entrprises et en résultats la somme des effectifs en fonction de la ville et de l'entrprise -> d'où mon histoire de tableau croisé.
Mais rien que dans mon script (plus haut) il n'arrive pas à afficher la somme des effectifs en mettant tout en colonne donc déjà c'est pas gagné ensuite il s'agit de mettre en forme un formulaire croisé de la forme :
Paramètre 2
Elementa/Paramètre 2 | Elementb/Paramètre 2 ....
Paramètre 1
Elementa/paramètre 1 sommeeffectifaa sommeeffectifab
Elementb/paramètre 1 sommeeffectifba sommeeffectifbb
.... .... ....
Et ça je sais pas comment faire ça !!!
En tout cas merci pour ton aide!!!
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 9 sept. 2005 à 09:27
Ben c'est normal que tu aies du mal avec cette table.
Ok, mettons que tu cherches par rapport à une ville.
Donc un truc du genre (je ne reprends pas tes champs, j'arrive jamais à
m'en souvenir lol, et j'ai pas envie de remonter voir chaque fois ;-) )
:
SELECT ville, entreprise, effectif FROM table WHERE ville = $ville
Ok ?
tu fais ta requête, ton while...et tu obtiens, pour chaque boucle de
ton while, un tableau (disons que ton while fasse : while ($ligne =
mysql_fetch_assoc ($requete)) ) $ligne contenant tes 3 valeurs.
Il est évident que tu n'écriras pas ça comme tu le veux de cette
manière. Malheureuement, la seule manière que je vois de procéder est
de passer par un intermédiaire. A chaque itération de ta boucle, tu
stockes tes 2 valeurs dans 2 tableaux différents (je dis 2 parce que la
ville est déjà connue, et il y en a une seule) :
$entreprise[] = $ligne['entreprise'];
$effectif[] = $ligne['effectif'];
Après, ça devient plus simple...
Je te donne un exemple basique, à toi de l'améliorer selon tes désirs, bien sûr :
tu crées ton tableau en html
<table> ... etc
la première ligne va contenir les entreprises. Donc tu ouvres ton
<tr>, tu crées un <td> vide qui fera l'angle au gauche vide
de ton tableau, puis tu boucles sur ton tableau $entreprise pour créer
tes <td> :
foreach ($entreprise as $cie) {
echo '<td>', $cie, '<td>';
}
puis tu fermes ton <tr>.
Tu as une seule ville, donc dans ton prochain <tr>, tu ne crées
qu'un <td> avec la ville. tu le fermes. Il doit se trouver sous
ton <td> vide. Puis tu te retrouves sous les <td> de tes
entreprises. Il ne te reste plus qu'à faire pareil que pour les
entreprises : tu boucles sur ton tableau $effectif.
Et enfin, tu fermes ton <tr>, puis ton tableau.
Le principe est le même si tu veux afficher toutes les villes et toutes
les entreprises, mais cette fois tu stockes aussi les villes dans un
tableau.
fredo35m
Messages postés244Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention12 juillet 2006 9 sept. 2005 à 09:38
bon ok, je vais essayé de m'en sortir avec ton aide !! j'espère !! je t'assure rien mais je vais tenter, parce que je suis pas doué avec les tableaux et comme je ne veux pas que ce soit standard mais extensible en fonction de nombre ville etc ... j'ai du mal à visualiser le tout mais j'vais essayé !!!
Pour les totaux c'est ce que j'avais essayé de faire avec SUM mais ça ne m'affichait plus rien !! enfin mon truc devait pas être bien écrit non plus !!!
Encore merci malalam !!!
Bon je vais essayé de construire ce tableau !!!!
merci
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 9 sept. 2005 à 09:53
Hmm je me rends compte que ça ne résoud pas ton problème de tableau
croisé. Si tu veux plusieurs villes et plusieurs entreprises, c'est
nettement plus complexe. J'avais pensé à plusieurs requêtes, vu que ta
table craint méchamment... ;-) Mais ça va être complexe...j'ai
recommencé 4 fois ce message lol...3 fois en imaginant plusieurs
requêtes, mais la tableau est tro difficile (voire impossible) à créer.
1 fois en stockant dans un tableau multidimensionnel, mais le problème
est le même.
Le principe serait de récupérer tes entreprises par exemple, avec un
DISTINCT pour éviter les doublons : SELECT DISTINCT entreprise FROM
table ORDER BY nom_entreprise ASC (par exemple hein). Et de créer ta
ligne de tableau comme en haut.
Puis de faire de même pour les villes, en créant le tableau idem qu'en haut pour avoir tes villes en colonne.
Enfin, avec tes 2 tableaux (villes et entreprises), faire des requêtes
en bouclant dessus...et c'est là que le bât blesse...ça va faire
BEAUCOUP de requêtes. 1ère requête : tu boucles sur tes
entreprises...puis sur tes villes :
foreach ($entreprise as $cie) {
foreach ($ville as $city) {
...SELECT effectif FROM table WHERE ville=$city AND entreprise=$entreprise
création d'une ligne sous la ligne des
entreprises, à droite de la ville (en fait un 3ème tableau, c'est le
mieux). Mais il faut se débrouiller pour remplir à 0 si
l'entreprise n'est pas présente dans la ville...c'est là le plus
complexe
fredo35m
Messages postés244Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention12 juillet 2006 9 sept. 2005 à 11:13
j'm'en sors pas !!!!
voici ce que j'ai écris !! ça marche bien pour la première ligne mais pas pour les suivantes :
dans mon exemple
$param1=LIBCOM -> libéllé commune
$param2=EPCI -> entreprise
$param3=EFET -> effectif
<?php
mysql_select_db($database_local, $local);
$query_Recordset1 = "SELECT $param1, $param2, $param3 FROM sirene_petit GROUP BY $param1, $param2";
$Recordset1 = mysql_query($query_Recordset1, $local) or die(mysql_error());
echo $param1;
echo $param2;
echo $param3;