[php] Tordu : Afficher le SUM de plusieurs DECODE passés en variable ?

Tordu : Afficher le SUM de plusieurs DECODE passés en variable ? [php] - PHP - Programmation

Marsh Posté le 22-04-2004 à 23:00:15    

Rha !
C'est pas clair, et c'est vachement difficile à expliquer ...
J'ai un gros query oracle dans lequel j'ai un select decode(...) as "nom", decode(...) as "nom", decode(...) as "nom", etc
J'aimerais afficher la valeur de chaque decode dans une table HTML, sachant que cette valeur est un SUM :
Donc, sous 'nom', j'ai la somme correspondante ...
Le truc tordu, c'est que tous les decodes sont passés dans le query sous la forme d'une variable : $var qui contient le string équivalent aux decodes : $var = "decode(...),decode(...), etc"
Chaque 'nom' étant différent ...
Ensuite je fais une boucle pour afficher tout ça dans la table HTML : en fonction du nombre de 'nom', il boucle et doit m'afficher une colonne par nom ... Il devrait mettre le SUM en dessous du nom, mais il vaut pas !!! Il m'affiche le 'nom' à la place ...
Il me donne pourtant le bon nombre de lignes et de colonnes
Je ne sais pas comment récupérer la valeur SUM pour chaque decode ...
Bref : y a-t-il moyen d'extraire de mon $var les colonnes ('nom', 'nom') et les passer dans la table ($result[NOM][$i] ...) en plaçant le sum sous chaque 'nom ???
Un esprit tortueux aura-t-il compris ? Merci ! 3 jours que j'en bave !
 

Reply

Marsh Posté le 22-04-2004 à 23:00:15   

Reply

Marsh Posté le 22-04-2004 à 23:02:58    

Salut,
 
tu pourrais mettre un petit bou du code, car là j'y vois pas très clair avec tes explications.
 
Merci
Pierre


Message édité par Lord II le 22-04-2004 à 23:03:07
Reply

Marsh Posté le 22-04-2004 à 23:24:49    

Oui, mais le code est encore plus tordu :D
Je vais tenter le coup ...

Reply

Marsh Posté le 22-04-2004 à 23:44:04    

Je fais un select où je récupère les articles qui seront en paramètre des DECODE
 
Select item ...
 
Je fais deux boucles :
 
La première construit le string "decode" ($field correspond à chaque item)
La seconde construit un string pour le where : where item in ('item', 'item', ...) => $ref = chaque item
 

Code :
  1. for ($i = 0; $i < $nrows; $i++ )
  2. {
  3. $field = $result["ITEM"];
  4. $art .= "decode(c.t\$item,'$field[$i]',sum(c.t\$oqua)) as \"$field[$i]\",";
  5. }
  6. for ($i = 0; $i < $nrows; $i++ )
  7. {
  8. $ref = $result["ITEM"];
  9. $line .= "'$ref[$i]',";
  10. }


 
J'obtiens :
 
select a, b, c, $art 0 from x, y, z where ... item in ($line 0)
 
Note : les deux '0' c'est parce que je boucle en ajoutant  une virgule entre chaque item, donc à la fin il me reste une virgule "libre', alors je mets un "faux" champ 0 (pas trop un problème)
Ca donne : decode(item,item,SUM(qty)) as "item", decode(item,item,SUM(qty)) as "item", 0 .... in (item, item, 0)
 
Et je termine :
 

Code :
  1. echo "<html><body>";
  2. echo "<table border=3 cellspacing='2'>\n<tr>\n";
  3. for ($x = 0; $x < $nrow; $x++ )
  4. {
  5. echo "<tr>\n";
  6. echo "<td><small>" . $res["A"][$x]. "</small></td>";
  7. echo "<td><small>" . $res["B"][$x]. "</small></td>";
  8. echo "<td><small>" . $res["C"][$x]. "</small></td>";
  9. for ($i = 0; $i < $nrows; $i++ )
  10. {
  11. echo "<td><small>" . $field[$i] . "</small></td>";
  12. }
  13. echo "<td>" . $res["0"][$x]. "</td>";
  14. echo "</tr>\n";
  15. }
  16. echo "</body></html>\n";
  17. ?>


 
J'ai le bon nombre de lignes et de colonnes
Mais il m'affiche l'item (200.01, par ex) et non la somme qui lui correspond ...
J'arrive pas à récupérer la somme en fait ...
 
Genre :
 
NUMERO - NOM  - ITEM
0001   - TOTO - 8
0002   - TUTU - 6
 
A la place de 8,6 j'ai le numéro d'item (qui est en char)
 
Derni!re précision : tout ça c'est sur vers oracle, sur Baan ... Donc le code est vraiment peu lisible ...
J'ai fait de mon mieux ...
Y a pt'être moyen d'éviter le decode pour ça, et de passer par des fonctions oracle/php dédiées ...
(Le nombre d'article est aléatoire, il dépend d'un range de date entré en POST par formulaire, d'où la source de mes probs ...)


Message édité par Mosca le 22-04-2004 à 23:44:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed