Categories > TinyButStrong general (FR) >

petit problème avec les sous-blocs

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Lionel
Date: 2005-03-14
Time: 18:55

petit problème avec les sous-blocs

bonjour,

Tout d'abord un grand BRAVO pour TBS, c'est VRAIMENT une merveille ! Je suis en train d'alléger mes scripts et d'améliorer leur lisibilité comme jamais !

Je suis toutefois confronté à un problème tout bête. Dans une application de suivi des interventions effectués par des opérateurs pour différents services, j'ai trois tables:

Interventions: id, id_demandeur, id_service, objet, etc...
demandeurs: id, nom, etc...
Services: id, nom, etc...

Vous l'aurez compris, je ne stocke que les Id des services et des intervenants dans la table Interventions.

Le bout de code pour allez chercher les noms des protagonistes ressemble à ceci:
// on récupère les détails de la demande
$TBS->MergeBlock('blk1','mysql','SELECT * FROM interventions WHERE id='.$id);
// on récupère le nom du demandeur
$TBS->MergeBlock('blk2','mysql','SELECT nom FROM demandeurs WHERE id=%p1%');
// on récupère le nom du service demandeur
$TBS->MergeBlock('blk3','mysql','SELECT nom FROM services WHERE id=%p2%');

et dans mon fichier HTML, j'ai ceci:

<table>
<tr><td>[blk1.id;block=table]</td></tr>
<tr><td>[blk2.nom;block=table;p1=[blk1.id_demandeur]]</td></tr>
<tr><td>[blk3.nom;block=table;p2=[blk1.id_service]]</td></tr>
<table>

Tout se passe bien pour le bloc p1 et je récupère effectivement le nom du demandeur mais j'obtiens l'erreur suivante pour le bloc p2:

TinyButStrong Error (MergeBlock [blk3]): MySql error message when opening the query: Erreur de syntaxe près de '%p2%' à la ligne 1

Et là.. se sèche lamentablement ...
By: Skrol29
Date: 2005-03-15
Time: 00:27

Re: petit problème avec les sous-blocs

Bonjour,

Pour blk3, il faut utiliser
  p1=[blk1.id_service]
dans le champ, et
  WHERE id=%p1%
dans la requête.
On utilise p2 quand on a déjà un p1 mais dans le même requête. Hors là ce sont dans deux requêtes différentes.

Mais au fait, pourquoi n'utilises-tu pas simplement une seule requête SQL avec jointures de table ? C'est fait pour ça et ça va beaucoup plus vite que des sous-blocs.
By: Lionel
Date: 2005-03-15
Time: 08:43

Re: petit problème avec les sous-blocs

Ben oui, tu as parfaitement raison pour les jointures. A force de focaliser sur TBS on en fini par oublier ses bases de SQL :-)

En ce qui concerne la rapidité, elle devrait être identique non? Vu de l'extérieur de TBS, il y a trois requêtes à faire mais c'est vrai que j'ignore ce qui se passe sous le capot.

Pour ceux qui suivent le Thread dans le forum, j'ai utilisé les jointures et  modifié la chose comme ceci:
// on récupère les détails de la demande
$TBS->MergeBlock('blk1','mysql','SELECT * FROM interventions WHERE id='.$id);
// on récupère le nom du demandeur
$TBS->MergeBlock('blk2','mysql','SELECT demandeurs.nom FROM demandeurs, interventions WHERE demandeurs.id=interventions.id_demandeur AND interventions.id='.$id);
// on récupère le nom du service demandeur
$TBS->MergeBlock('blk3','mysql','SELECT services.nom FROM services, interventions WHERE services.id=interventions.id_service AND interventions.id='.$id);

et la table dans le fichier HTML devient:
<table>
<tr><td>[blk1.id;block=table]</td></tr>
<tr><td>[blk2.nom;block=table]</td></tr>
<tr><td>[blk3.nom;block=table]</td></tr>
</table>

Un grand merci pour ton aide !

By: Skrol29
Date: 2005-03-15
Time: 09:17

Re: petit problème avec les sous-blocs

La requête SQL avec jointure est plus rapide. Avec des requêtes dynamiques, tu ne fais pas trois requêtes, mais 2 requêtes pour chaques enreg de ta requête principale. Si il y a un certain nombre d'enreg, l'envoi des requête coutera plus cher en temps que le traitement des requêtes.
Ce n'est pas un problème lié à TBS, mais à la conception des serveurs de bases de données.