IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Calculer une somme pour chaque ligne et colonne d'un tableau [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut Calculer une somme pour chaque ligne et colonne d'un tableau
    Bonjour,

    bon j'espère que vous comprendrez assez facilement mon problème ...

    J'ai un tableau de 5 colonnes et 5 lignes :
    - 1ère ligne : je fais la liste de mes "missions" et le total (ce ne sont donc que des titres de colonnes)
    - 1ère colonne : je fais la liste des mes "entreprises" et le total (ce ne sont donc que des titres de lignes).

    Pour chaque entreprise, je calcule le nombre de tâches effectuées classées par mission.

    Chaque personne correspond à une entreprise.
    A chaque projet, on a des "entreprises" travaillant pour telle ou telle mission un certain nombre de jours (le nombre de tâches).
    Pour chaque projet, on détermine le nombre de tâches qu'il y a eu pour chaque mission, pour chaque entreprise et en tout.

    Exemple :
    - Ligne 1 (titre : entreprise1) : 2 | 0 | 1 || 3
    avec : 2 tâches pour la mission1/entreprise1, 0 tâche pour la mission2/entreprise1, 1 tâche pour la mission3/entreprise1, soit un total de 3 tâches pour l'entreprise1.

    Je fais donc ce découpage en missions pour chaque entreprise avec le total de tâches à chaque fois pour chacune d'elle.

    Ensuite, par colonne (donc par mission), je dois également calculer le nombre de tâches !

    Et pour finir, le nombre de tâches dans la "colonne" Total doit être le même que le nombre de tâches dans la "ligne" Total.

    Je pense qu'avec un petit screen ce sera mieux ... Cf fichier joint.

    Mon problème : je n'arrive pas à calculer le nombre de tâches par ligne, et encore moins par colonne !
    Pour trouver le nombre total de tâches, j'y arrive, mais la décomposition non =/

    Voici mes tables, enfin une partie :
    - Table travail : id_travail, date, mission, type_mission, id_projet,login_personne ...
    - Table personne : login_personne ...
    - Table projet : id_projet ...

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    // Tableau des mission
    $tabmiss = array();
    $reqmiss = mysql_query("SELECT mission FROM travail;");
    while ($donnees = mysql_fetch_array($reqmiss))
    {
    	$miss = $donnees['type_mission'];
    	$tabmiss[] = $miss;
    }
    $nbtab = count($tabmiss);
     
    // On récupère les entreprises 
    $reqent = mysql_query("SELECT DISTINCT entreprise
    				FROM personne;");
    while ($row = mysql_fetch_array($reqent))
    {
    	// Pour chaque type d'entreprise, on va calculer le nb de tâches
    	echo '<tr><td>'.$row['entreprise'].'</td>';
    	// On calcule le nombre de tâches pour chaque type de mission différent et pour chaque type d'entreprise
    	for($i=0;$i<$nbtab;$i++)
    	{   
    		$reqnb = mysql_query("SELECT COUNT(T.id_travail) AS nbtr
    						FROM travail T JOIN personne P ON T.login_personne=P.login_personne
    						WHERE T.id_projet='".$projet."' AND T.type_mission = '".$tabmiss[$i]."'
    						AND P.entreprise = '".$row['entreprise']."';") or die(mysql_error());
    if(mysql_num_rows($reqnb) == 0)
    	echo '<td>0</td>';
    else
    {
    	$resnb = mysql_result($reqnb,0);
    	if ($resnb > 0)
    		echo '<td>'.$resnb.'</td>';
    	else echo '<td>0</td>';
    	$total += $resnb; // Total des tâches pour un projet donné
    }
     
    }
    echo '<td>tot : '.$total.'</td>';
    	}
    Déjà, est-ce que pour le moment mon code va ? (parce que j'ai le résultat sans problème mais c'est peut-être complètement non optimisé)
    Ensuite, est-ce que vous voyez comment je pourrai obtenir mes totaux pour chaque ligne et chaque colonne ?

    Merci bien !

    PS : faut-il d'autres infos ?
    Images attachées Images attachées  

  2. #2
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Je me permets de faire remonter mon topic ...

    J'ai pensé à cette solution :
    - je mets toutes mes valeurs dans un tableau
    - je découpe le tableau 3 par 3
    - j'additionne chaque valeur de trio les unes aux autres.

    Bon y'a peut-être mieux, mais là je ne vois pas.

    Comment puis-je découper le tableau en petits tableaux de 3 valeurs ou récupérer les valeurs 3 par 3 pour ensuite les additionner ?

    (ceci fonctionnerait pour l'affiche en ligne, mais en colonne je ne sais pas encore ...)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    Points : 366
    Points
    366
    Par défaut
    bonjour,
    sans fioriture çà devrait se présenter comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    print("<table>");
    print("<tr><th>entreprise</th><th>col1</th><th>col2</th><th>col3</th><th>total</th></tr>");
    while($res=mysql_fetch_array($resquery)){
    $col1+=$res[0];
    $col2+=$res[1];
    $col3+=$res[2];
    print("<tr><td>".$entreprise."</td><td>".$res[0]."</td><td>".$res[1]."</td><td>".$res[2]."</td><td>".$res[0]+$res[1]+$res[2]."</td></tr>");
     
    }
    print("<tr><td>&nbsp;</td><td>".$col1."</td><td>".$col2."</td><td>".$col3."</td><td>".$col1+$col2+$col3."</td></tr>");
    print("</table>");
    ?>
    Emmanuel
    --------------------------------------
    aucune réponse en message privé.
    les discussions doivent profiter à tous.

  4. #4
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Merci notar mais voici ce que ton code m'affiche :

    00
    entreprise col1 col2 col3 total
    00
    entreprise col1 col2 col3 total
    00
    entreprise col1 col2 col3 total
    00
    entreprise col1 col2 col3 total
    00
    entreprise col1 col2 col3 total
    00
    entreprise col1 col2 col3 total
    00
    entreprise col1 col2 col3 total
    00
    entreprise col1 col2 col3 total
    00
    entreprise col1 col2 col3 total
    Une autre solution ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    Points : 366
    Points
    366
    Par défaut
    bonjour,
    j'ai juste donné une façon de mettre les valeurs en ligne et en colonne et de les additionner, comme demandé.
    bien évidemment, je n'ai pas réécrit votre code; il faut l'adapter de manière à ce qu'il ressemble à ce canevas.
    Emmanuel
    --------------------------------------
    aucune réponse en message privé.
    les discussions doivent profiter à tous.

  6. #6
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Merci notar !

    J'ai réussi à trouver une solution pour l'affichage des totaux par ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    if(mysql_num_rows($reqnb) == 0)
    	echo '<td>0</td>';
    else
    {
    	$resnb = mysql_result($reqnb,0);
    	if ($resnb > 0)
    		echo '<td>'.$resnb.'</td>';
    	else echo '<td>0</td>';
    }
    $res +=$resnb;
    if($j == 3)
    {
    	$tabto[] = $res;
    	echo '<td>'.$tabto[0].'</td>'; 
    	$tabto = array();
    	$res = 0;
    }
    $j++;
    Reste l'affichage par colonne, je vais regarder le code de notar de plus près.

    EDIT : bon problème résolu, j'ai créé une autre requête, c'est pas terrible mais au moins ça fonctionne ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une requête pour chaque ligne de la table
    Par Nasky dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/05/2012, 11h16
  2. [XL-2003] exécuter une macro pour chaque ligne.
    Par visto94 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2010, 13h48
  3. Réponses: 1
    Dernier message: 30/11/2009, 15h29
  4. Calculer une somme suivant les intitulés de colonne
    Par trigger00 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/07/2009, 09h33
  5. [Composants] TRichEdit: Une police pour chaque ligne
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/03/2003, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo