php/mysql: faire un tableau complexe qui calcule des totaux

rafiki14
Invité n'ayant pas de compte PHPfrance

11 mai 2011, 17:09

Bonjour,

Je voudrai créer un tableau qui calcule de totaux d'après les informations contenues dans ma base de données.
J'ai une base de données contenant des informations sur des participants à un stage.
Je voudrais donc créer ceci:
semaine_______________sexe_____93____94___95______total____total/semaine
1ere semaine___________F________5_____8____1_______14_________19
1ere semaine___________M_______2______3____0_______5______
2semaine______________F________7______1____6______14__________28
2semaine______________M________4______2____8______14
total/année____________F________12_____9_____7_____
total/année____________M________6______5_____8_____

Etc..
je ne sais pas si vous comprenez mais j'ai besoin de votre aide.
j'ai essayé avec un foreach de parcours de tableau mais je n'obtient pas ce que je souhaite.
Mon plus gros problème c'est de mettre le bon calcul (avec la bonne requête) au bon endroit!

Si quelqu'un veut bien m'aider, merci d'avance.

ViPHP
ViPHP | 2291 Messages

11 mai 2011, 18:35

Donne nous la structure de ta base.
Dis nous aussi à quoi correspond le total année, et le total/semaine

A+
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 19672 Messages

11 mai 2011, 21:53

Ce serait surtout beaucoup plus clair avec deux tableaux pour ta sortie, quelque chose comme ceci par exemple :
+--------------+------+----+----+----+
| semaine      | sexe | 93 | 94 | 95 |
+--------------+------+----+----+----+
| 1ere semaine | F    |  5 |  8 |  1 |
| 1ere semaine | M    |  2 |  3 |  0 |
| 2nde semaine | F    |  7 |  1 |  6 |
| 2nde semaine | M    |  4 |  2 |  8 |
+--------------+------+----+----+----+

+-------------+---------+---------+---------------+
|     semaine | total_F | total_M | total/semaine |
+-------------+---------+---------+---------------+
|           1 |      14 |       5 |            19 |
|           2 |      14 |      14 |            28 |
+-------------+---------+---------+---------------+
| total année |      28 |      19 |            47 |
+-------------+---------+---------+---------------+
Non ? :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2291 Messages

12 mai 2011, 00:08

Et en suivant l'exemple de CYRANO cette requête devrait faire l'affaire :)
SELECT SEXE,R_93, R_94, R_95, SEMAINE,
	         SUM( IF( SEXE ='F', R_93, 0))AS F1,
	         SUM( IF( SEXE ='F', R_94, 0))AS F2,
	         SUM( IF( SEXE ='F', R_95, 0))AS F3,
	         SUM( IF( SEXE ='M', R_93, 0))AS M1,
	         SUM( IF( SEXE ='M', R_94, 0))AS M2,
	         SUM( IF( SEXE ='M', R_95, 0))AS M3,
	         SUM( R_93 + R_94 + R_95 )AS total
           FROM CALCUL
           GROUP BY SEXE, SEMAINE 
Exemple de ma table

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `calcul` ( `ID` int(5) NOT NULL AUTO_INCREMENT, `SEXE` varchar(2) NOT NULL, `R_93` int(5) NOT NULL, `R_94` int(5) NOT NULL, `R_95` int(5) NOT NULL, `SEMAINE` int(11) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

rafiki14
Invité n'ayant pas de compte PHPfrance

12 mai 2011, 15:12

Merci pour vos réponses

Je crois que j'ai réussi à gérer ça en construisant un tableau à 2 dimensions et en faisant des boucles for!
je galère juste un peu au niveau de l'affichage des dernières colonnes de totaux, ma boucle fonctionne quand je fais un print j'ai le bon resultat, mais quand je veux afficher mon tableau j'ai une erreur du type Notice: Undefined offset: 4..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 mai 2011, 15:28

salut,

ce type d'erreur est principalement dû a une mauvaise gestion d'un index, tu fait appel à l'index 4 qui n'existe pas dans ton tableaux, c'est pour cela qu'il est préférable d'utiliser foreach plutôt que for pour parcourir des tableaux ;)


@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2291 Messages

12 mai 2011, 16:10

Merci pour vos réponses

Je crois que j'ai réussi à gérer ça en construisant un tableau à 2 dimensions et en faisant des boucles for!
je galère juste un peu au niveau de l'affichage des dernières colonnes de totaux, ma boucle fonctionne quand je fais un print j'ai le bon resultat, mais quand je veux afficher mon tableau j'ai une erreur du type Notice: Undefined offset: 4..
Avec ton code il serait plus simple de t'apporter notre aide :wink:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

rafiki14
Invité n'ayant pas de compte PHPfrance

16 mai 2011, 12:31

j'ai trouvé mon erreur j'avais mal défini certaines variables !
tout fonctionne maintenant !
Merci.