Tableau bidimmensionnel

Leffe
Invité n'ayant pas de compte PHPfrance

03 juin 2006, 22:31

Bonsoir,

Je n'arrive pas à trouver comment construire un tableau à 2 dimensions à partire de données extraites de mes tables.

Voici le tableau que j'obtiens après l'affichage brut des données :

Code : Tout sélectionner

coco 13 16 18 17 18 18 toto 15 15 16 14 17 16 lolo 15 13 16 15 15 16 yoyo 14 15 15 16 17 15 momo 16 14 12 13 10 12 coco 13 16 17 17 16 17 toto 13 15 16 16 16 16 lolo 15 17 17 18 16 17 yoyo 16 16 17 16 17 17 momo 17 18 17 15 15 17 coco 17 16 16 16 16 16 toto 16 14 13 14 13 13 lolo 16 16 16 16 17 16 yoyo 13 18 15 15 13 15 momo 16 16 0 17 13 0 coco 14 16 16 11 14 16 toto 13 14 15 16 16 15 lolo 15 15 15 17 17 15 yoyo 17 16 17 17 15 17 momo 17 14 11 14 18 11 coco 15 14 17 15 16 17 toto 15 14 6 17 16 6 lolo 16 16 17 16 18 17 yoyo 16 17 17 17 16 17 momo 17 16 15 14 12 15 coco 15 15 16 17 15 16 toto 17 17 12 16 11 12 lolo 14 17 20 17 13 20 yoyo 16 17 15 14 19 15 momo 16 16 17 14 14 17
Ce que je veux, c'est faire additionner chaque valeur de chaque colonne correspondant au nom.

J'ai essayé en commençant ça :
while( $t = mysql_fetch_assoc($result) )
{
    for($i=0; $i<=($tt/6); $i++)
    {
            ${'n'.$i} += $t['c'.$i];
    }                        
}
Mais après, je ne sais pas comment procéder pour regrouper les lignes avec les noms correspondant.

Merci.

Eléphant du PHP | 383 Messages

03 juin 2006, 22:38

je pense qu'il serait plus judicieux de faire cette somme via sql, c'est fait pour ca...

Leffe
Invité n'ayant pas de compte PHPfrance

03 juin 2006, 22:56

Merci, mais je ne pense pas que ce soit possible, mais si t'as une solution :D

Voici ma requête :

Code : Tout sélectionner

SELECT pseudo, c1, c2, c3, c4, c5, c6 FROM participant AS P LEFT OUTER JOIN concours_participant AS CP ON P.id = CP.id_participant RIGHT OUTER JOIN note AS N ON CP.id_participant = N.id_cp WHERE CP.id_concours = (SELECT MAX(id_concours) FROM concours_participant);

Eléphant du PHP | 451 Messages

03 juin 2006, 23:52

Je ne suis pas expert mais as tu regardé du côté de grouped by et sum ?
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 383 Messages

04 juin 2006, 00:56

oui, c'est ca.. de memoire, c'est un truc du genre :

Code : Tout sélectionner

Select sum(trucA),sum(trucB)... from table groub by nom

Leffe
Invité n'ayant pas de compte PHPfrance

04 juin 2006, 09:46

C'est génial, avec un round, sum, et group by, je n'ai plus qu'à afficher les totaux avec le php.

Merci, c'est résolu :P

Leffe
Invité n'ayant pas de compte PHPfrance

04 juin 2006, 14:11

Rebonjour,

J'aurais une autre petite question :

Ci-dessous ma requête actuelle :

Code : Tout sélectionner

SELECT pseudo, ROUND((SUM(c1) / 6 * " . $coef1 . " / 100), 2) AS n1, ROUND((SUM(c2) / 6 * " . $coef2 . " / 100), 2) AS n2, ROUND((SUM(c3) / 6 * " . $coef3 . " / 100), 2) AS n3, ROUND((SUM(c4) / 6 * " . $coef4 . " / 100), 2) AS n4, ROUND((SUM(c5) / 6 * " . $coef5 . " / 100), 2) AS n5, ROUND((SUM(c6) / 6 * " . $coef6 . " / 100), 2) AS n6 FROM participant AS P LEFT OUTER JOIN concours_participant AS CP ON P.id = CP.id_participant RIGHT OUTER JOIN note AS N ON CP.id_participant = N.id_cp WHERE CP.id_concours = (SELECT MAX(id_concours) FROM concours_participant) GROUP BY pseudo;
Est-ce que ce serait possible de faire dans cette requête le total de n1,n2,n3,n4,n5,n6 de l'affecter à un alias, et de classer l'affichage avec un ORDER BY DESC sur cet alias représentant le total.

J'ai essayé de diverses façon, mais à chaque fois j'ai une erreur sql.

Merci.

Mammouth du PHP | 19672 Messages

04 juin 2006, 14:28

As-tu essayé celle-ci ?

Code : Tout sélectionner

SELECT pseudo, ROUND((SUM(c1) / 6 * " . $coef1 . " / 100), 2) AS n1, ROUND((SUM(c2) / 6 * " . $coef2 . " / 100), 2) AS n2, ROUND((SUM(c3) / 6 * " . $coef3 . " / 100), 2) AS n3, ROUND((SUM(c4) / 6 * " . $coef4 . " / 100), 2) AS n4, ROUND((SUM(c5) / 6 * " . $coef5 . " / 100), 2) AS n5, ROUND((SUM(c6) / 6 * " . $coef6 . " / 100), 2) AS n6, (SUM(c1) + SUM(c2) + SUM(c3) + SUM(c4) + SUM(c5) + SUM(c6)) AS total FROM participant AS P LEFT OUTER JOIN concours_participant AS CP ON P.id = CP.id_participant RIGHT OUTER JOIN note AS N ON CP.id_participant = N.id_cp WHERE CP.id_concours = (SELECT MAX(id_concours) FROM concours_participant) GROUP BY pseudo;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Leffe
Invité n'ayant pas de compte PHPfrance

04 juin 2006, 14:39

Ah, donc je suis obligé de refaire tout le calcul pour le total, je pensais que l'on pouvait additionner les alias n1, n2, etc...

Merci , je vais faire comme ça. ;)

Mammouth du PHP | 19672 Messages

04 juin 2006, 17:46

Je dirais que si ça fonctionne, c'est le plus important. Faire l'addition de résultats obtenus dans les légnés précédentes d'une même requête, je serais tenté de dire que "logiquement" ça devrait fonctionner mais dans la pratique, je suis moins affirmatif et c'est la raison de mon choix dans la formulation proposée.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: