Categories > TinyButStrong general (FR) >

Colonnes dynamiques avec MySQL

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Lionel
Date: 2005-05-11
Time: 11:54

Colonnes dynamiques avec MySQL

Bonjour,

Je me creuse la tête pour comprendre comment vous avez réalisé les colonnes dynamiques. il y a notament cette fonction "[r.[c1.val;block=td]]" dans le modèle HTML  qui me semble pour le moins obscure...

Pour ma part, je souhaiterais réaliser un tableau croisé du même genre mais avec des requêtes SQL. chaque ligne réprésente un client, chaque colonne un vendeur et, à l'intersection, le chiffre d'affaire. Je me base sur une table vendeur (id, nom), sur une table client (id,nom) et sur une table vente ( id, idClient, idVendeur, montant).

dans le fichier PHP:

// liste des vendeurs
$TBS->MergeBlock('blk1','mysql','SELECT * FROM vendeur');

// liste des clients
$TBS->MergeBlock('blk2','mysql','SELECT * FROM client');

// chiffre d'affaire
$TBS->MergeBlock('blk3','mysql','SELECT SUM(montant) AS chiffre FROM vente WHERE id_vendeur=%p1% AND id_client=%p2%');

Dans le fichier HTML:

<table>
  <tr>
    <td>chiffre d'affaire</td>
    <td>[blk1.nom;block=td]</td>
  </tr>
  <tr>
    <td>[blk2.nom;block=tr]</td>
    <td>[blk3.chiffre;block=td;p1=[blk1.id];p2=[blk2.id]]</td>
  </tr>
</table>

Ok, ce que j'ai compris c'est que le blk3 n'est pas considéré comme un sous-bloc de blk1 et, effectivement, je ne récupère jamais de valeur pour p2. Certes... mais comment faire ?

Merci d'avance pour votre aide.








By: Skrol29
Date: 2005-05-11
Time: 15:39

Re: Colonnes dynamiques avec MySQL

Salut Lionel,

Tu n'es pas loin de la soluce.
Dans ton cas, on retrouve la même subtilité quand dans l'exemple du truc et astuce. C'est que le bloc blk1 est défini sur le <td> (block=td) ; cela est correct mais du coup le "p1=[blk1.id]" se trouve en dehors de ce bloc, donc il n'est pas fusionné comme tu l'attends.

Ce qu'il faut faire c'est fusionner deux blocs avec cette même liste de vendeur : un premier bloc pour afficher les noms su la première ligne, et un deuxième bloc pour les id sur les lignes suivantes.

Il te faut donc changer
  [blk1.id]
en
  [blk1bis.id;block=td]
Et changer
  $TBS->MergeBlock('blk1','mysql','SELECT * FROM vendeur');
en
  $TBS->MergeBlock('blk1,blk1bis','mysql','SELECT * FROM vendeur');
Et ça devrait rouler.


Pour te donner une explication de "[r.[c1.val;block=td]]" :
ce n'est pas une syntaxe spéciale de TBS. Il faut s'imaginer ce que ça va donner à la fusion.
  <td>[r.[c1.val;block=td]]</td>
va donner :
  <td>[r.val1]</td> <td>[r.val2]</td> <td>[r.val3]</td> ...
Qui lui, pourra être fusionné correctement par la suite.



By: Lionel
Date: 2005-05-11
Time: 18:41

Re: Colonnes dynamiques avec MySQL

J'adore quand tu me réponds parce que, juste après, ca fonctionne nickel !

un grand MERCI !