Page 1 sur 2

tableau croisé ???

Posté : 06 oct. 2005, 08:06
par FAbrice
Bonjour,

Je voulais savoir s'il etait possible de faire une sorte de tableau croisé dynamique en php/sql?

je vous explique.
Actuelement, j'ai un tableau qui est sous la forme suivante:
Secteur | Element | Nombre

Je fait un count par element et par secteur (+tri decroissant par nombre), dans le but de trouver l'element ET et le secteut qui reviennent le plus souvent.

Cette mise en page est correcte pour pourrait etre bcq mieux si je trouvais le moyen de faire mon tableau sous une forme:

........... |Element1|Element2|...
Secteur1|
Secteur2|

je ne sais pas si vous voyez ce que je cherche a faire :?

Pour le moment, j'ai le code + la requete sql pour fair le tableau sous la 1ere forme, pê que ca peut servir pour le nouvelle forme :wink:

merci de votre aide,
FAb

Posté : 06 oct. 2005, 10:32
par heddicmi
Il te faudra exécuter plusieurs requêtes...

En gros, tu exécutes la même requête mais en ajoutant un where selon le secteur.... Tu récupèreras donc les valeurs pour chaque éléments pour le secteur... En bouclant dessus, tu créés les cellules et place les valeurs...

Puis tu passes à la ligne suivante, avec un nouveau secteur dans le where...

Posté : 06 oct. 2005, 11:05
par FAbrice
Euh, vi, si tu le dis, :wink:

actuellement, g deja mes requetes, tu pourrais me donner un coup de patte pour faire la fusion? :oops:

Merci bcq,
FAb

Posté : 06 oct. 2005, 11:06
par heddicmi
Montre ce que tu as déjà fais...

Posté : 06 oct. 2005, 11:51
par FAbrice
voici la requete sql pour le tableau forme n°1:

Code : Tout sélectionner

SELECT secteurs.secteurs as toto, elements.details as tata ,count(*) as titi FROM expertise, secteurs, elements, registre WHERE registre.ID= expertise.numdossier and secteurs.id=registre.secteur and expertise.element=elements.ID GROUP BY expertise.Element, secteurs.Secteurs ORDER BY titi DESC [quote] tu penses que ca va etre faisable? FAb[/quote]

Posté : 06 oct. 2005, 12:01
par heddicmi
Donc je refais... Cette requête, tu la ré-exécutes autant de fois que de secteur... Sauf que dans ta requête, tu ne groupes plus que par element et tu rajoutes une clause dans le where pour définir le secteur souhaité...

Tu auras au final une requête avec chaque element et le count.
Tu inserts les résultats de count dans les cellules d'une ligne du tableau, puis tu ré-exécutes la requêtes avec le secteur suivant, tu remplis les cellules d'une ligne suivantes, etc...

Posté : 08 oct. 2005, 17:28
par SpcK
Fabrice j'ai eu, je pense, exactement le même pb de tablé croisé que toi.
Tu peux voir mon code pour t'en inspirer : http://www.phpfrance.com/forums/voir_sujet-9233.php

Posté : 10 oct. 2005, 08:29
par FAbrice
salut,


je viens d'aller sur ton ancien post et j'ai essayé d'adapter ton code a mon cas mais ca plante :=(

Pour le moment, j'ai la requete suivante:

Code : Tout sélectionner

SELECT secteurs.secteurs as toto, elements.details as tata ,count(*) as titi FROM expertise, secteurs, elements, registre WHERE registre.ID= expertise.numdossier and secteurs.id=registre.secteur and expertise.element=elements.ID GROUP BY expertise.Element, secteurs.Secteurs ORDER BY titi DESC
et le tableau
//...
    <table border="1">
    <tr>
      <td width="215"><div align="center"><strong>SECTEUR</strong></div></td>
      <td width="215"><div align="center"><strong>DEFAUT</strong></div></td>
      <td width="175"><div align="center"><strong>DENOMBREMENT</strong></div></td>
      <td width="180"><div align="center"><strong>RATIO GLOBAL </strong></div></td>
      </tr>
    <?php do { ?>
    <tr>
      <td width="215"><div align="center"><?php echo $row_avisot['toto']; ?></div></td>
      <td width="215"> <div align="center">
        </div>
      <div align="center"><?php echo $row_avisot['tata']; ?></div>      </td>
      <td width="175"><div align="center"><?php echo $row_avisot['titi']; ?></div></td>
      <td width="180"><div align="center"><?php echo number_format($row_avisot['titi']/$row_totalparelement['count(defaut)']*100,2); ?> % </div></td>
    </tr>
    <?php } while ($row_avisot = mysql_fetch_assoc($avisot)); ?>
  </table>
  <p>&nbsp;</p>
je ne vois pas pourquoi je n'arrive pas a adapter ton code :oops: donc si tu as 5 min ... :wink:

merci de ton aide,
FAb

Posté : 10 oct. 2005, 08:50
par Cyrano
Fabrice, scrongneugneu, + de 200 messages et tu me mets encore du code avec le bouton [quote] [-X

Bon, dans ton code, tu utilises "$row_totalparelement['count(defaut)']" : "count(default)" n'est pas dans ta requête, donc déjà, ça va planter à cet endroit.

Est-ce que ta requête exécutée directement te retourne les résultats voulus ?

Posté : 10 oct. 2005, 09:37
par Invité
Salut

La requete fonctionne parfaitement telqu'elle est ecrite.

le "$row_totalparelement['count(defaut)']" : "count(default)" correspond en effet a une autre requete de la plage qui me permet de compter le nobre de defauts total. rien ne vous echappe :wink:

est ce que tu vois une sol a ce pb? :oops:

ps: dsl pour l'utilisation abusive du "quote" ;=)

Posté : 10 oct. 2005, 10:05
par mere-teresa
Qu'est-ce qu'un tableau croisé ? Un tableau multi-dimensionnel ?

Posté : 10 oct. 2005, 10:25
par FAbrice
c un tableau dans lequel le nombre de colonnes et de lignes n'est pas fixé!

Posté : 10 oct. 2005, 10:45
par mere-teresa
Comme tous les tableaux :) c'est extensible.
Mais tu parles bien de tableau PHP ? (type Array)

Posté : 10 oct. 2005, 18:54
par FAbrice
alut,

Pour le moment, le type du tableau est defini dans un de mes post précédent.
S'il faut le passer en array, je ne suis pas contre :wink:

Posté : 11 oct. 2005, 10:11
par FAbrice
bonjour,

personne ne voit de solution a mon pb? :cry: