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 :

[MySQL5] Somme de deux résultats d'une fonction [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 204
    Par défaut [MySQL5] Somme de deux résultats d'une fonction
    bonjour,
    j'ai fait une fonction qui calcule le nombre d'elèves selon le niveau d'etude (1ere annee,2annee,3 annee)
    voila ma fonction:
    calcul nombre d'eleves d'aprés le code de filiere $fil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     function stat_fil_xage($code_crefd,$iannee,$fil)   
    {
     $db1=mysql_select_db("scolarite".$code_crefd);
    $sql_xage="select * from age_wil_eleve where ICODE=$fil "; 
     $res_xage=mysql_query( $sql_xage);
     if ($res_xage==FALSE)
    echo mysql_error();
    return(mysql_num_rows($res_xage));			  	   
    }
    cette fonction retourne le nombre d'eleve, moi je fais entrer le code filiere. j'ai plusieurs codes et l'affichage est dans un tableau pareil
    code filiere .......... nombre d'eleves
    ____________________________
    104 ......................... 235
    204 .......................... 98
    304 ......................... 125
    ____________________________
    total ....................... ????
    le calcul pour chaque niveau la fonction marche bien
    mais pour afficher (calculer) le total dans le tableau j'ai fait comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo (stat_fil($code_crefd,$iannee,'204')+stat_fil($code_crefd,$iannee,'104')+stat_fil_xage($code_crefd,$iannee,'304'));
    ça marche pas
    j'ai fait aussi comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo (intval(stat_fil($code_crefd,$iannee,'204'))+intval(stat_fil($code_crefd,$iannee,'104'))+intval(stat_fil_xage($code_crefd,$iannee,'304')));
    intval a fonctionne en mysql, mais en mysql5 ne fonctionne pas et moi j'utilise mysql5 car j'ai travaillé avec les vues ou mysql ne connait pas les vues.
    Comment afficher la somme SVP aidez moi ?
    bien sûr je fais l'affichage dans une page php.
    Merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Une seule requête suffit pour récupérer la totalité.

    Essaie ça :
    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
    <?php
      function stat_fil_xage($code_crefd)   
      {
        $db1 = mysql_select_db('scolarite' . $code_crefd);
        $sql_xage = 'SELECT icode, count(*) as nb 
                     FROM age_wil_eleve
                     GROUP BY icode'; 
        $res_xage = mysql_query($sql_xage);
        if ($res_xage==FALSE)
        {
          echo mysql_error();
        }
     
        $nombre = array();
        while ($item = mysql_fetch_object($res_xage))
        {
          $nombre[$item -> icode] = $item -> nb;
        }
        return $nombre;
      }
     
      function creeTableau($nombre)
      {
        $nb = sizeof($nombre);
        $tableau = '<table border="1"><tr><td align="center">Code filière</td><td align="center">Nombre d\'élèves</td></tr>';
        foreach ($nombre as $code => $valeur)
        {
          $tableau .= '<tr><td align="center">' . $code . '</td><td align="center">' . $valeur . '</td></tr>';
        }
        $tableau .= '<tr><td align="center">Total</td><td align="center">' . array_sum($nombre) . '</td></tr></table>';
        return $tableau;
      }
      //---------------------------------------------  
      //---------------------------------------------
    ?>
    <html>
      <head>
      </head>
      <body>
        <?php echo creeTableau(stat_fil_xage($code_crefd)); ?>
      </body>
    </html>
    Il manque le paramètre '$code_crefd' et la connexion au serveur.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 204
    Par défaut
    Bonjour Mr jeca
    mercie pour ta solution, dites moi count(*) quesqu'elle fait et aussi mysql_fetch_object? et encore j'ai reduit mon select, j'ai plusieurs conditions dans select.voila la mienne:

    calcul nombre d'eleves pour 1 centre , 1 code , 1 annee
    ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function stat_cen_ann_fil_xage($code_crefd,$iannee,$fil,$sexe,$g1,$g2)   
     {
     $db1=mysql_select_db("scolarite".$code_crefd);
    $sql_xage="select * from age_wil_eleve where IANNEE='$iannee' AND ICODE=$fil AND SEXE='$sexe' AND age BETWEEN '$g1' AND '$g2'"; 
     $res_xage=mysql_query( $sql_xage);
     if ($res_xage==FALSE)
    echo mysql_error();
    return(mysql_num_rows($res_xage));			  	   
    }
    les parametres $code_crefd,$iannee se reçoient par poste (selection d'une liste deroulante) moi je fait entrer $fil,$sexe,$g1,$g2.
    sachant que la table age_wil_eleve c'est une vue de deux table(inscription et eleve)
    est ce que je peu comme ça faire la solution que vous m'avez proposé?
    et merci

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Essaie ça :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
      function stat_fil_xage($code_crefd, $iannee, $sexe, $g1, $g2)
      {
        //-- calcule le nb d'élèves par filière pour 1 année, 1 sexe et une fourchette d'âge --------
        $db1 = mysql_select_db('scolarite' . $code_crefd);
        $sql_xage = 'SELECT ICODE, count(*) as nb 
                     FROM age_wil_eleve
                     WHERE IANNEE = \'' . $iannee . '\' 
                     AND SEXE = \'' . $sexe . '\' 
                     AND age BETWEEN \'' . $g1 . '\' AND \'' . $g2 . '\' 
                     GROUP BY ICODE'; 
        $res_xage = mysql_query($sql_xage);
        if ($res_xage==FALSE)
        {
          echo mysql_error();
        }
     
        $nombre = array();
        while ($item = mysql_fetch_object($res_xage))
        {
          $nombre[$item -> ICODE] = $item -> nb;
        }
        return $nombre;
      }
     
      function creeTableau($nombre)
      {
        $nb = sizeof($nombre);
        $tableau = '<table border="1">
                      <tr>
                        <td align="center">Code filière</td>
                        <td align="center">Nombre d\'élèves</td>
                      </tr>';
        foreach ($nombre as $code => $valeur)
        {
          $tableau .= '<tr>
                         <td align="center">' . $code . '</td>
                         <td align="center">' . $valeur . '</td>
                       </tr>';
        }
        $tableau .=   '<tr>
                         <td align="center">Total</td>
                         <td align="center">' . array_sum($nombre) . '</td>
                       </tr>
                     </table>';
        return $tableau;
      }
      //---------------------------------------------  
      //---------------------------------------------
      $code_crefd = (isset($_POST['code_crefd'])) ? $_POST['code_crefd'] : '';
      $iannee = (isset($_POST['iannee'])) ? $_POST['iannee'] : '';
      //-- à compléter -----------------------------------
      $sexe = 'xxxxxx';
      $g1 = 'xxxxxxx';
      $g2 = 'xxxxxxx';
    ?>
    <html>
      <head>
      </head>
      <body>
        <?php echo creeTableau(stat_fil_xage($code_crefd, $iannee, $sexe, $g1, $g2)); ?>
      </body>
    </html>
    Si tu veux toutes les filières, '$fil' ne sert à rien.

    Pour le 'count()', lire la doc là :
    http://dev.mysql.com/doc/refman/5.0/...functions.html

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 204
    Par défaut
    Merci et je vous suis trés reconaissante,ça va m'aider.

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

Discussions similaires

  1. Etat, Somme de résultat d'une fonction
    Par choubak dans le forum IHM
    Réponses: 5
    Dernier message: 26/07/2007, 08h13
  2. Affecter résultat d'une fonction à une variable ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 07/09/2006, 14h45
  3. Récupérer le résultat d'une fonction dans une balise html
    Par Hayato dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2006, 17h04
  4. Réponses: 6
    Dernier message: 08/06/2006, 10h07
  5. somme de deux champs d'une requete
    Par decour dans le forum Access
    Réponses: 2
    Dernier message: 22/03/2006, 09h43

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