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 :

Calcul d'un taux à partir d'une boucle while [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut Calcul d'un taux à partir d'une boucle while
    bonsoir à tous !
    ceci est une requete qui calcule le nombre d'appels selon la tranche d'age:

    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
    <?$query = "SELECT trancheage,COUNT(*) as nbappel
    FROM personne_appelante p, age
    where p.idtrancheage=age.idtrancheage
    and dat_appel between '$ddeb' AND '$dfin' 
    GROUP BY trancheage;";
    $result=mysql_query($query);
    $totenreg=mysql_num_rows($result);
     
     
    if ($totenreg==0)
    echo "<td colspan=9><h5>LE NOMBRE D'APPELS EST ZERO</td>";
    else
    {
     
    echo "</tr>";
    }
    echo "</form>";
     
    $i=0;$totappel=0;$tauxtotal=0;
    while ($row = mysql_fetch_array($result))
    {
     
    echo "<td><h5>".$row["trancheage"]."</td>";
    echo "<td><h5>".$row["nbappel"]."</td>";
    $totappel= $totappel+ $row["nbappel"];
    $taux=(100*$row["nbappel"])/$totappel ;
    echo "<td><h5>$taux%</td>";
    $tauxtotal=$tauxtotal+$taux;
    echo "<tr>";
    }
    //echo "</table>";
    ?>
    ce code marche impec, parcontre le taux il le calcule par rapport au nombre totals des appels à chaque itteration de la boucle or le nombre total des appels à la première itteration prends la valeur 0+nbappel si nbappel =1 à la premiere ittration le taux=100% si nbappel =1 à la deuxième itteration le taux=50% parceque le nombretotal des appels =2.

    ce qui fait le taux total =100%+50%= 150% et ce n'est pas ça que je veux avoir.

    j'ai essayé de calculer le taux dans une autre boucle while en utilisant le resultat nombre total des appels calculé de la première boucle et ça n'a pas marché.

    quellequ'un a compris mon problème et il a une solution a me donner?

    merci!!!!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut quel résultat?
    c'est quoi le résultat que tu es censé avoir si le nb total appels =2?
    puis = 3? Je serais à mieux de t'aider ensuite car là je ne comprends pas trop ce que tu explique.

    Merci de me préciser les résultats désirés et je pourrais t'aider.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    merci de ta réponse!

    le résultat que je veux avoir c 'est le taux de chaque nbappel (itteration) par rapport au nombre total des appel.
    le nombre total des appels on l'a qu'à la sortie de la boucle ca qui fait imposible d'avoir ces taux en utilisant la meme boucle.

    si vous n'avez pas encore compris n'esitez pas me demander plus d'explication.

    merci !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    une autre petite precision zyongh, la somme des taux ($tauxtotal) il faut qu'elle soit egale à 100%.

    merci de m'aider!!

  5. #5
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut alors c'est simple
    donc si j'ai bien compris si $nbappel = 15 et $totalappel = 100 alors $taux = 15%. Si c'est ce que tu veux la solution est que tu calcules le taux en dehors de la boucle while maintenant si tu as plus $nbappel il faut que tu ramène le $nbappel à O avant l'itération suivante

    exemple:
    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
     
    $nbappel = 0;
     
    while{
            // code de recherche des valeurs
     
     
            // calcul du taux
            $taux = $nbappel / $totalappel
            // sauvegarde dans un fichier texte
            fwrite($fp, $taux."\n");
     
            // et on ramène le nbappel à 0
            $nbappel = 0;
    }
    Si j'ai pas compris ta demande alors réponds à ma première question avec les résultats à obtenir sur une suite de 3.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    tu dois faire une requête avec COUNT pour calculer le nbre total d'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $res = mysql_query("SELECT COUNT(nbappel) as nbtotalappel FROM TaTable WHERE ...");
    Apres tu recupères avec mysql_resul() pour le calcul du taux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $taux=(100*$row["nbappel"])/mysql_result($res,0,'nbtotalappel');
    a+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    j'ai trop compris ce que tu veux dire remettre à 0 le nombre d'appel, par contre voila le code en complet

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <TD><TABLE border=1 cellpadding=2 cellspacing=0 bordercolor="#396BAD">
    <TR bgcolor="white">
    <TD class=titre5>AGES DES DEMANDEURS</TD>
     
    <TD class=titre6 width=100>NBRE D'APPEL</TD>
     
    <TD class=titre6 width=100>TAUX</TD>
     
    </TR>
    <?$query = "SELECT trancheage,COUNT(*) as nbappel
    FROM personne_appelante p, age
    where p.idtrancheage=age.idtrancheage
    and dat_appel between '$ddeb' AND '$dfin' 
    GROUP BY trancheage;";
    $result=mysql_query($query);
    $totenreg=mysql_num_rows($result);
     
     
    if ($totenreg==0)
    echo "<td colspan=9><h5>LE NOMBRE D'APPELS EST ZERO</td>";
    else
    {
     
    echo "</tr>";
    }
     
    $i=0;$totappel=0;$tauxtotal=0;
    while ($row = mysql_fetch_array($result))
    {
     
    echo "<td><h5>".$row["trancheage"]."</td>";
    echo "<td><h5>".$row["nbappel"]."</td>";
    $totappel= $totappel+ $row["nbappel"];
    $taux=(100*$row["nbappel"])/$totappel ;
    echo "<td><h5>$taux%</td>";
    $tauxtotal=$tauxtotal+$taux;
    echo "<tr>";
    }
    //echo "</table>";
    ?>
    <TR>
    <TD class=titre5 bgcolor="#396BAD"><font color="white">Total </font></TD>
     
    <TD class=titre7 bgcolor="#396BAD"><font color="white"><? ; 
    	  echo $totappel; ?></font></TD>
    <TD class=titre7 bgcolor="#396BAD"><font color="white"><? ; 
    	  echo "$tauxtotal % ";?></font></TD>
    </TR>		   
     
    </table>		
    </td>

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    c est un tableau de 3 colonnes dans la 1 colonne il m'affiche les trange d'age
    la 2 colonne il affiche pour chaque tranche d'age son le nb appel.

    à la dernière ligne du tableau on a le nombre totals des appels à partir de là qu'on peux calculer la taux d'appel de chaque tranche d'age par rapport au nombre totals des appels on utilisant la formule
    taux=(100*nbappel)/totalnbappel
    cette fois ci je crois que je suis claire

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    je sais pas si t'as remarqué ma réponse ... mais bon de tte façon elle n'était pas bonne .

    Tu dois utiliser SUM à la place de COUNT et tu auras ce que tu veux.

    a+

  10. #10
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut okkkkk
    Alors là c'est très simple!

    Tu places ta boucle while dans une boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for($trancheage = ; $tranche <= $tranchemax; $trancheage++){
            while(...){ ... }
            // juste derrière la boucle while tu place le calcul de ton taux
            // tout en restant dans la boucle for
            $taux = ...;
    }
    Alors Zana, elle est pas belle la vie en Haute Savoie? (74)
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par billoum
    Salut,

    tu dois faire une requête avec COUNT pour calculer le nbre total d'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $res = mysql_query("SELECT COUNT(nbappel) as nbtotalappel FROM TaTable WHERE ...");
    Apres tu recupères avec mysql_resul() pour le calcul du taux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $taux=(100*$row["nbappel"])/mysql_result($res,0,'nbtotalappel');
    a+
    le nombre total des appels je l'ai à la sortie de la boucle while, pourquoi refaire la requete?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    ben comme ca tu l'auras avant et tu pourras l'utiliser dans ta boucle pour le calcul du taux.

    Et puis tu ne refais pas la requête, c'en est une autre.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par zyongh
    Alors là c'est très simple!

    Tu places ta boucle while dans une boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for($trancheage = ; $tranche <= $tranchemax; $trancheage++){
            while(...){ ... }
            // juste derrière la boucle while tu place le calcul de ton taux
            // tout en restant dans la boucle for
            $taux = ...;
    }
    Alors Zana, elle est pas belle la vie en Haute Savoie? (74)
    pour te répondre, je ne suis pas savoyarde,.
    si j'utilise la boucle for comment récuperer chaque ligne pour lui compter son taux je veux dire row["nbappel"]

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par billoum
    ben comme ca tu l'auras avant et tu pourras l'utiliser dans ta boucle pour le calcul du taux.

    Et puis tu ne refais pas la requête, c'en est une autre.
    j'ai utilisé ta solution voila resultat

    à la lign 93 :$taux=(100*$row["nbappel"])/mysql_result($res,0,'nbtotalappel');

    Warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\g115\statistique.php on line 93

    Warning: Division by zero in c:\program files\easyphp1-8\www\g115\statistique.php on line 93

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Ca veux dire que la requête a échoué, quand tu testes tes requêtes tu dois toujours faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = mysql_query($requete) or die(mysql_error().':<br>'.$requete));
    et ca t'afficheras l'erreur renvoyée par mysql.

    Si tu ne trouves pas la solution, montre l'erreur et la requête.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par billoum
    Ca veux dire que la requête a échoué, quand tu testes tes requêtes tu dois toujours faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = mysql_query($requete) or die(mysql_error().':<br>'.$requete));
    et ca t'afficheras l'erreur renvoyée par mysql.

    Si tu ne trouves pas la solution, montre l'erreur et la requête.
    une petite prcision:nbappel c'est un champ calculé il n'existe pas dans la base donc je peux pas utiliser sum(nbappel) et si jutilise count(*) as nbtotappel il donne 1 seule enregistrement or il existe 2 dans la base

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Excuse-moi pour le nbappel, je n'avais pas bien lu ta requête .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    "SELECT trancheage,COUNT(*) as nbappel
    FROM personne_appelante p, age
    where p.idtrancheage=age.idtrancheage
    and dat_appel between '$ddeb' AND '$dfin' 
    GROUP BY trancheage;"
    Mais bon si j'ai bien compris, la somme de tous les nbappel est égal au nombre d'enregistrements.

    alors pourquoi ne pas utiliser ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $totenreg=mysql_num_rows($result);
    pour calculer le taux?

  18. #18
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Slt

    J’avais déjà été confronté à un souci similaire et peut-être que tu pourrais t’inspirer du script ci-dessous et l’adapter à tes besoins, qui sait ?
    Pour l’exemple, j’ai créé quelques variables, mais tu dois pouvoir facilement l’adapter en récupérant celles-ci dans tes tables.

    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
     
    <?php
     
    // exemple
     
    $age1 = 46; // tranche d'age et nombre d'appel
    $age2 = 18; 
    $age3 = 30;
    $age4 = 22;
    $totalappels = $age1+$age2+$age3+$age4;
    $tableau_valeurs = array("15"=>$age1,"20"=>$age2,"30"=>$age3,"40"=>$age4);
     
    while ($tranche_age = each($tableau_valeurs))
    {
    $taux = number_format(($tranche_age[1]*100)/$totalappels, 2, ",", " ");
    echo "Age $tranche_age[0] ($taux%)<br>";
    }
    ?>
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par billoum
    Excuse-moi pour le nbappel, je n'avais pas bien lu ta requête .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    "SELECT trancheage,COUNT(*) as nbappel
    FROM personne_appelante p, age
    where p.idtrancheage=age.idtrancheage
    and dat_appel between '$ddeb' AND '$dfin' 
    GROUP BY trancheage;"
    Mais bon si j'ai bien compris, la somme de tous les nbappel est égal au nombre d'enregistrements.

    alors pourquoi ne pas utiliser ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $totenreg=mysql_num_rows($result);
    pour calculer le taux?
    bonjour! merci de ta réponse
    j'ai essayé d'utilisé au départ le totenreg, mais ça ne marche pas car j'ai utilisé group by tranche d'age pour qu'il me donne le nb appel pour chaque tranche d'age donc le nbtotal des appel n'est pas egal à totenreg, c'est pour ça que j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $totappel=$totappel+$row["nbappel"];
    merci beaucoup!
    si tu as une autre proposition n'ésite pas!

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par alain31tl
    Slt

    J’avais déjà été confronté à un souci similaire et peut-être que tu pourrais t’inspirer du script ci-dessous et l’adapter à tes besoins, qui sait ?
    Pour l’exemple, j’ai créé quelques variables, mais tu dois pouvoir facilement l’adapter en récupérant celles-ci dans tes tables.

    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
     
    <?php
     
    // exemple
     
    $age1 = 46; // tranche d'age et nombre d'appel
    $age2 = 18; 
    $age3 = 30;
    $age4 = 22;
    $totalappels = $age1+$age2+$age3+$age4;
    $tableau_valeurs = array("15"=>$age1,"20"=>$age2,"30"=>$age3,"40"=>$age4);
     
    while ($tranche_age = each($tableau_valeurs))
    {
    $taux = number_format(($tranche_age[1]*100)/$totalappels, 2, ",", " ");
    echo "Age $tranche_age[0] ($taux%)<br>";
    }
    ?>
    bonjour et merci de ta réponse
    le $totalappels je l'ai en mettant un compteur dans la boucle while, par contre comment recuperer le nombre d'appel de chaque tranche d'age pour ensuite l'utiliser pour calculer le taux par rapport à $totalappels?

    à vous de m'aider car je suis vraiment debutante et ce la fait 2 jours que je suis sur ça, merci pour toute aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2010, 07h39
  2. Réponses: 4
    Dernier message: 05/04/2007, 13h20
  3. [débutant] [Tableaux] un array à partir d'une boucle
    Par denis.ws dans le forum Langage
    Réponses: 3
    Dernier message: 22/11/2006, 22h37
  4. [MySQL] Traitement de Formulaire : générer des ensemble à partir d'une boucle foreach
    Par yodaazen dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/10/2006, 15h28

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