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 :

Calculs sur des tableaux [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut Calculs sur des tableaux
    bonjour a tous

    comme l'indique le titre de mon message, je suis débutant et je patauge un peu.
    j'ai effectuer quelques recherches sur le net et je ne trouve pas mon bonheur.

    je vous explique,

    ma table:



    -calcul 1

    Mean = x ¯ = (Egg+C1+C2+C3)/(n=Nombre Total de plots)

    Ex. pour la table présentée ci-dessus :

    Mean = ((2+0+0+2)+(2+2+0+0)+(2+0+0+0)+(0+1+1+1))/4

    -calcul 2

    En clair:
    Faire pour chaque ligne du tableau la somme de Egg+C1+C2+C3 = x
    Soustraire à x la moyenne x ¯ (calcul1) et multiplier le résultat par lui-même (au carré), appelons le résultat final y.
    On aura donc pour chaque ligne un y
    Additionner tous les y entre eux et diviser le résultat par (n-1) c-à-d le nombre total de plots moins 1 (il faut donc compter le nombre de lignes du tableau pour avoir n)
    On prend ensuite la racine carrée de cette division pour avoir l’ « erreur standard » s .

    voila ce que j ai fait php, mysql

    pour le calcul 1

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /* Calcul  Mean*/
    $Requete = mysql_query("SELECT SUM(egg+C1+C2+C3)/COUNT(id) FROM ps_brno"); 
    $Result = mysql_result($Requete,0);
    echo $Result

    je sais pas si c'est réellement correct, mais sa me donne a priori le résultat voulu.

    pour le calcul 2

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* Calcul  Y*/
    $Requete = mysql_query("SELECT (egg+C1chick+C2chick+C3chick)-($Result) FROM ps_brno");
    $Result2 = mysql_result($Requete,0);
    $Requete = mysql_query("SELECT SUM($Result2)*($Result2)");
    $Result3 = mysql_result($Requete,0);
    echo $Result3

    c'est ce que j ai réussi a faire en me débrouillant, mais je bloque.

    comment appliquer le calcul2 a toutes les lignes, pour pouvoir Additionner tous les y entre eux et diviser le résultat par (n-1) c-à-d le nombre total de plots moins 1 (il faut donc compter le nombre de lignes du tableau pour avoir n)
    On prend ensuite la racine carrée de cette division.


    voila, je ne sais pas si j'ai été clair, si vous avez besoin d'autre infos, je suis a votre disposition.

    merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    As tu des résultats à proposer à partir de ton code ?
    j'ai un peu du mal avec le x et y dans ton explication...

    bref, pour commencer, as tu vu qu'il existe une fonction "stdev" native sous mysql:

    (penser à vérifier si cette fonction est non-biaisée (division par N-1) ou pas (division par N) sur un petit jeu de données :

    voici un exemple:
    http://www.java2s.com/Tutorial/MySQL...tionofexpr.htm

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut details
    bonjour et merci de ton aide,

    je vais essayer de détailler les opérations.

    ma table:


    -calcul 1

    Mean = x ¯ = (Egg+C1+C2+C3)/(n=Nombre Total de plots)

    Ex. pour la table présentée ci-dessus :

    Mean = ((2+0+0+2)+(2+2+0+0)+(2+0+0+0)+(0+1+1+1))/4

    ici on additionne toutes les lignes de la table:

    1er ligne 2+0+0+2=4
    2e ligne 2+2+0+0=4
    3e ligne 2+0+0+0=2
    4e ligne 0+1+1+1=3

    on additionne tout les résultats et on divise par le nombres d entrées
    (ici 4 entrées, il aurait pu y en avoir plus.)

    ce qui nous donne 13/4=3.25
    donc x ¯ = 3.25

    suite du calcul:

    ensuite, a faire pour chaque ligne du tableau la somme de Egg+C1+C2+C3 = x

    exemple pour la ligne1 : 2+0+0+2=4 donc x=4
    pour la ligne2 : 2+0+0+2=4 donc x=4
    pour la ligne3 : 2+0+0+0=4 donc x=2
    pour la ligne4 : 0+1+1+1=3 donc x=3


    Soustraire à x la moyenne x ¯ : x ¯=3.25 (résultat du calcul1 ci-dessus),

    donc: pour ligne 1, 4-3.25= 0.75
    pour ligne 2, 4-3.25= 0.75
    pour ligne 3, 2-3.25= -1.25
    pour ligne 4, 3-3.25= -0.25

    et multiplier le résultat par lui-même (au carré), appelons le résultat final y


    Donc ligne 1 y= 0.75*0.75 = 0.5625
    Ligne 2 y= 0.5625
    Ligne 3 y= 1.5625
    Ligne 4 y= 0.0625

    Additionner tous les y entre eux

    donc: (0.5625) + (0.5625) + ( 1.5625) + (0.0625) = 2.75

    diviser le résultat par (n-1) c-à-d le nombre total de plots moins 1 (il faut donc compter le nombre de lignes du tableau pour avoir n)

    n=4 (nombre de lignes du tableau)

    donc: 4-1=3

    ce qui nous donne 2.75/3 = 0.961667

    On prend ensuite la racine carrée de cette division pour avoir l’ « erreur standard »

    Donc Erreur standard = 0.95743


    cordialement.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut je coince
    en fait j en suis la avec mon rapport,



    mon probleme :

    Donc ligne 1 y= 0.75*0.75 = 0.5625

    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
     
    $Requete = mysql_query("SELECT SUM(egg+C1chick+C2chick+C3chick) FROM ps_brno"); 
    $Result = mysql_result($Requete,0); 
     
    $Requete = mysql_query("SELECT COUNT(id) FROM ps_brno"); 
    $Result2 = mysql_result($Requete,0); 
     
    $Requete = mysql_query("SELECT SUM($Result)/($Result2)");
    $Result3 = mysql_result($Requete,0); 
     
    $Requete = mysql_query("SELECT egg+C1chick+C2chick+C3chick FROM ps_brno"); 
    $Result4 = mysql_result($Requete,0);
     
    $Requete = mysql_query("SELECT SUM($Result4)-($Result3)");
    $Result5 = mysql_result($Requete,0);
     
    $Requete = mysql_query("SELECT SUM($Result5)*($Result5)");
    $Result6 = mysql_result($Requete,0);
     
    ?>
     
    <head>
    </head>
     
    <table>
    	<tr>
    	<td><img alt="" src="mean-calcul.png"/></td>
    	</tr>
    	<tr>
    		<td style="width: 441px">Calcul somme totale de egg+C1+C2+C3</td>
    		<td style="width: 160px"><?php echo $Result;?></td>
    	</tr>
    	<tr>
    		<td style="width: 441px">Calcul le nombre de plots entree</td>
    		<td style="width: 160px"><?php echo $Result2;?></td>
    	</tr>
    	<tr>
    		<td style="width: 441px">Mean = X</td>
    		<td style="width: 160px"><?php echo $Result3;?></td>
    	</tr>
    	<tr>
    	<td><img alt="" src="deviation-calcul.png"/></td>
    	</tr>
    	<tr>
    		<td style="width: 441px">Calcul somme de egg+C1+C2+C3 = 'x'</td>
    		<td style="width: 160px"><?php echo $Result4;?></td>
    	</tr>
    	<tr>
    		<td style="width: 441px">Calcul soustraire a 'x' la moyenne 'X' = F</td>
    		<td style="width: 160px"><?php echo $Result5;?></td>
    	</tr>
    	<tr>
    		<td style="width: 441px">multiplier F par lui meme = Y</td>
    		<td style="width: 160px"><?php echo $Result6;?></td>
    	</tr>
    </table>
    comment appliquer ce calcul a toutes les lignes pour trouver leur Y, afin de finaliser mon calcul.
    a ce moment, je n arrive qu'a calculer la ligne1.

    cordialement.

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ; voila coté mysql y'a des fonctions par exemple pour calculer la moyenne on utilise AVG...
    http://dev.mysql.com/doc/refman/5.0/...functions.html
    ensuite tu, peut utilisé les groupe by.....
    dans le cas des calcule compliqué , je crois qu'il faut passer par des tableaux pour stocker tes variables c'est une idée ensuite lancer les calcule avec des commande javascript.

  6. #6
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    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
     
    <html>
    <head>
    <title>TEST MYSQL</title>
    </head>
     
    <body>
    <form>
    <fieldset style="width: 500px">
    <legend>MEAN VALUE </legend>
     
    <?php
    $link = mysql_connect('localhost', 'root', ''); 
    if (!$link) {
    die('Connexion impossible : ' . mysql_error());
    }
    $db = mysql_select_db('mybase');
     
    /* requete BDD : tu calcules ce dont tu as besoin ...*/
    $col = "(col1+col2)/2 as MEAN";
    $tab = "tab1";
     
    $req = "SELECT " .$col. " FROM " .$tab;
     
    $result = mysql_query($req);
     
    /* affichage */
    while($row = mysql_fetch_array($result)){
    echo "MEAN = ".$row[MEAN]."<BR>";
    }
    mysql_close($link);
    ?>
    </fieldset>
    </form>
    </body>
    </html>
    résultat sur mon jeu de données :
    MEAN VALUE
    MEAN = 3.5000
    MEAN = 4.5000
    MEAN = 5.5000
    MEAN = 6.5000
    MEAN = 9.5000
    MEAN = 16.5000

  7. #7
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    concernant les functions STDDEV, AVG ...:
    a priori, elles s'appliquent que sur LA colonne spécifiée et non pas sur une ligne.
    bref, c'est peut être possible mais je ne peux pas t'aider de ce coté là, car je ne les utilise pas. Le mieux c'est encore de prendre la DOC.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut presque fini
    salut

    tout d'abord un grand merci pour ton aide, cela ma beaucoup aider.

    maintenant j'ai ce 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
     
    <html>
    <head>
    <title>TEST MYSQL</title>
    </head>
     
    <body>
    <form>
    <fieldset style="width: 500px">
    <legend>MEAN VALUE </legend>
     
    <?php
    $link = mysql_connect('localhost', 'root', ''); 
    if (!$link) {
    die('Connexion impossible : ' . mysql_error());
    }
    $db = mysql_select_db('birdtest');
     
    /* requete BDD : tu calcules ce dont tu as besoin ...*/
    $Requete = mysql_query("SELECT SUM(egg+C1chick+C2chick+C3chick)/COUNT(id) as MEAN FROM ps_brno"); 
    $Result1 = mysql_result($Requete,0);
     
    $col = "((egg+C1chick+C2chick+C3chick)-($Result1))*((egg+C1chick+C2chick+C3chick)-($Result1)) as Y";
     
    $tab = "ps_brno";
     
    $req = "SELECT " .$col. " FROM " .$tab;
     
    $result = mysql_query($req);
     
    /* affichage */
    while($row = mysql_fetch_array($result)){
    echo "Y = ".$row['Y']."<BR>";
    }
     
    mysql_close($link);
    ?>
    avec ce resultat qui correspondent a tout mes 'Y' de ma table:



    je dois maintenant additionner tous les y entre eux

    donc: (0.5625) + (0.5625) + ( 1.5625) + (0.0625) = 2.75

    diviser le résultat par (n-1) c-à-d le nombre total de plots moins 1 (il faut donc compter le nombre de lignes du tableau pour avoir n)

    n=4 (nombre de lignes du tableau)

    donc: 4-1=3

    ce qui nous donne 2.75/3 = 0.961667

    On prend ensuite la racine carrée de cette division pour avoir l’ « erreur standard »

    Donc Erreur standard = 0.95743

    cordialement

  9. #9
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    je pense que tu devrais t'en sortir avec ce que tu as déjà programmé.
    En gros tu fais la somme de tes "Y" comme pour la requête "MEAN" avec un SUM et une division par (count(*)-1).
    tu peux aussi optimiser un peu ton code avec les fonctions power() et abs()

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $col = "((egg+C1chick+C2chick+C3chick)-($Result1))*((egg+C1chick+C2chick+C3chick)-($Result1)) as Y";
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $col = "POWER((egg+C1chick+C2chick+C3chick)-($Result1)),2) as Y";
    à toi de jouer ...

  10. #10
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut Alternative plus courte
    Bonjour,

    une autre approche :
    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
    <?php
     
    $data = array(
       array('plot' => 1,  'egg' => 2, 'c1' => 0, 'c2' => 0, 'c3' => 2),
       array('plot' => 12, 'egg' => 2, 'c1' => 2, 'c2' => 0, 'c3' => 0),
       array('plot' => 14, 'egg' => 2, 'c1' => 0, 'c2' => 0, 'c3' => 0),
       array('plot' => 42, 'egg' => 0, 'c1' => 1, 'c2' => 1, 'c3' => 1)
    );
     
    $plot = array();
    $egg  = array();
    $c1   = array();
    $c2   = array();
    $c3   = array();
     
    // eclatement des données
    foreach($data as $k => $v) {
       $plot[$k] = $v['plot'];
       $egg[$k]  = $v['egg'];
       $c1[$k]   = $v['c1'];
       $c2[$k]   = $v['c2'];
       $c3[$k]   = $v['c3'];
    }
     
    // moyenne
    $nb_plot = count($plot);
    $mean = (array_sum($egg) + array_sum($c1) + array_sum($c2) + array_sum($c3)) / $nb_plot;
     
    // calcul intermédiaire
    $sums = array();
    for($i = 0; $i < 4; ++$i) {
       $sums[] = pow($egg[$i] + $c1[$i] + $c2[$i] + $c3[$i] - $mean, 2);
    }
     
    // erreur standard
    $std_error = sqrt(array_sum($sums) / ($nb_plot - 1));
     
    ?>
    ou
    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
    <?php
     
    $data = array(
       array('plot' => 1,  'egg' => 2, 'c1' => 0, 'c2' => 0, 'c3' => 2),
       array('plot' => 12, 'egg' => 2, 'c1' => 2, 'c2' => 0, 'c3' => 0),
       array('plot' => 14, 'egg' => 2, 'c1' => 0, 'c2' => 0, 'c3' => 0),
       array('plot' => 42, 'egg' => 0, 'c1' => 1, 'c2' => 1, 'c3' => 1)
    );
     
    $sums = array();
     
    foreach($data as $k => $v) {
       $sums[$k] = $v['egg'] + $v['c1'] + $v['c2'] + $v['c3'];
    }
     
    // moyenne
    $nb_plot = count($data);
    $mean    = array_sum($sums) / $nb_plot;
     
    // calcul intermédiaire
    $mid = array();
    for($i = 0; $i < 4; ++$i) {
       $mid[] = pow($sums[$i] - $mean, 2);
    }
     
    // erreur standard
    $std_error = sqrt(array_sum($mid) / ($nb_plot - 1));
     
    ?>

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut encore besoin d'aide
    salut

    voila ou j'en suis

    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
     
    <?php
    $link = mysql_connect('localhost', 'root', ''); 
    if (!$link) {
    die('Connexion impossible : ' . mysql_error());
    }
    $db = mysql_select_db('birdtest');
     
    /* calcul de MEAN ...*/
    $Requete = mysql_query("SELECT SUM(egg+C1chick+C2chick+C3chick)/COUNT(*) as MEAN FROM ps_brno"); 
    $Result1 = mysql_result($Requete,0);
     
    /* calcul des Y par lignes ...*/
    $col = "POWER((egg+C1chick+C2chick+C3chick)-($Result1),2) as Y";
    $tab = "ps_brno";
     
    $req = "SELECT " .$col. " FROM " .$tab;
     
    $result = mysql_query($req);
     
    /* affichage */
    while($row = mysql_fetch_array($result)){
    echo "Y = ".$row['Y']."<BR>";
    }
    mysql_close($link);
    ?>
    ce qui me donne :



    comme je vous l'ai expliquer je suis débutant, j'ai fait jusqu’à présent des calcul de colonnes du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Requete = mysql_query("SELECT SUM(col1+col2+col3) as somme FROM table");
    dans le cas de figure ci-dessus je ne vois pas comment récupérer mes résultats Y pour pouvoir les additionner ensemble.

    merci de m'aider encore un peu.

    cordialement.

  12. #12
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Combien de plots tu manipules pour tes calculs ?

  13. #13
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Je t'ai crée une fonction stockée MySQL std_error() qui te fait tout ton calcul sans faire appel au PHP
    Code sql : 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
    CREATE DEFINER = 'root'@'localhost' FUNCTION `std_error`()
        RETURNS DOUBLE(12,9)
        NOT DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
    BEGIN
       DECLARE nb_plot INTEGER UNSIGNED;
       DECLARE mean DOUBLE(12,9);
       DECLARE ri DOUBLE(12,9);
     
       SELECT COUNT(*) INTO nb_plot FROM t_temp;
       SELECT SUM(egg + C1chick + C2chick + C3chick)/nb_plot INTO mean FROM ps_brno;
       SELECT SUM(POW(egg + C1chick + C2chick + C3chick - mean, 2)) INTO ri FROM ps_brno;
     
       RETURN SQRT(ri /(nb_plot - 1));
     
    END;

    Voic le résultat obtenu avec ton jeu de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Executed OK (0ms)
    Return Value: 0,957427108
    Et voici comment l'interroger en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql     = 'SELECT std_error()';
    $qry     = mysql_query($sql);
    $std_err = mysql_result($qry, 0);

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut calculs
    bonjour

    merci de ton aide 'rawsrc' , même si je ne comprends pas ton post.

    comme tu as du le lire ci dessus, je suis débutant, je ne connais rien sur
    les fonction stockée, et j'avoue que la, c est du chinois pour moi.

    j utilise php et mysql, car j arrive plus ou moins a comprendre avec un peu d'aide, bien sur.

    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
     
    <?php
    $link = mysql_connect('localhost', 'root', ''); 
    if (!$link) {
    die('Connexion impossible : ' . mysql_error());
    }
    $db = mysql_select_db('birdtest');
     
    /* calcul de MEAN ...*/
    $Requete = mysql_query("SELECT SUM(egg+C1chick+C2chick+C3chick)/COUNT(*) as MEAN FROM ps_brno"); 
    $Result1 = mysql_result($Requete,0);
     
    /* calcul des Y par lignes ...*/
    $col = "POWER((egg+C1chick+C2chick+C3chick)-($Result1),2) as Y";
    $tab = "ps_brno";
     
    $req = "SELECT " .$col. " FROM " .$tab;
     
    $result = mysql_query($req);
     
    /* affichage */
    while($row = mysql_fetch_array($result)){
    echo "Y = ".$row['Y']."<BR>";
    }
    mysql_close($link);
    ?>
    j aimerais donc pouvoir finir mon calcul, dans la suite de ce code, afin de pouvoir comprendre un minimum le fonctionnement.

    je dois maintenant additionner tous les y entre eux,
    diviser le résultat par (n-1) c-à-d le nombre total de plots moins 1 (il faut donc compter le nombre de lignes du tableau pour avoir n)
    On prend ensuite la racine carrée de cette division pour avoir l’ « erreur standard »

    tout d'abord ce que je demande, est ce que c'est possible ?
    si oui, peut tu me l'expliquer a la suite de mon code php.

    merci encore du temps que tu as passer a essayer de m'aider

    cordialement

  15. #15
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    Citation Envoyé par jarbinx Voir le message
    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
     
    <?php
    $link = mysql_connect('localhost', 'root', ''); 
    if (!$link) {
    die('Connexion impossible : ' . mysql_error());
    }
    $db = mysql_select_db('birdtest');
     
    /* calcul de MEAN ...*/
    $Requete = mysql_query("SELECT SUM(egg+C1chick+C2chick+C3chick)/COUNT(*) as MEAN FROM ps_brno"); 
    $Result1 = mysql_result($Requete,0);
     
    /* calcul des Y par lignes ...*/
    $col = "POWER((egg+C1chick+C2chick+C3chick)-($Result1),2) as Y";
    $tab = "ps_brno";
     
    $req = "SELECT " .$col. " FROM " .$tab;
     
    $result = mysql_query($req);
     
    /* affichage */
    while($row = mysql_fetch_array($result)){
    echo "Y = ".$row['Y']."<BR>";
    }
    mysql_close($link);
    ?>
    soit tu recrées un bloc de requête "calcul du STDEDV" avec php comme pour "Calcul de MEAN" et tu remplaces ta "$col", soit tu fais du tout en 1 pour avoir directement ton écart type :
    je crois que ça devrait marcher (mais j'ai pas testé... tu nous diras ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $col = "ABS(SUM(POWER((egg+C1chick+C2chick+C3chick)-($Result1),2))/(count(egg)-1)) as S";

  16. #16
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu n'es pas loin, voici comment faire pas à pas :
    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
    $link = mysql_connect('localhost', 'root', ''); 
    if (!$link) {
    die('Connexion impossible : ' . mysql_error());
    }
    $db = mysql_select_db('birdtest');
     
    $sql     = 'SELECT COUNT(*) FROM t_temp';
    $qry     = mysql_query($sql);
    $nb_plot = mysql_result($qry, 0);
     
    $sql  = "SELECT SUM(egg + C1chick + C2chick + C3chick)/$nb_plot FROM ps_brno";
    $qry  = mysql_query($sql);
    $mean = mysql_result($qry, 0);
     
    $sql = "SELECT SUM(POW(egg + C1chick + C2chick + C3chick - $mean, 2)) FROM ps_brno";
    $qry = mysql_query($sql);
    $y   = mysql_result($qry, 0);
     
    $std_err = sqrt($y / ($nb_plot -1));
    Penses à bien vérifier que nb_plot est supérieur à 1.

  17. #17
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut merci
    salut

    un grand merci a 'sweetasnz', tu m'a été d'une aide précieuse.

    merci aussi a 'rawsrc' .

    j’espère pouvoir me dépatouiller pour le reste.

    cordialement.

  18. #18
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    je crois que ce forum est là pour ça
    donc avec plaisir !
    penses à mettre "résolu" une fois que tout est bon pour toi.
    bonne continuation

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

Discussions similaires

  1. Calcul sur des tableaux
    Par whitearrow38 dans le forum VBScript
    Réponses: 0
    Dernier message: 07/07/2010, 18h23
  2. [Tableaux] calculs sur des vecteurs
    Par fAdoua123 dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2008, 13h13
  3. Réponses: 2
    Dernier message: 19/08/2003, 18h04
  4. free sur des tableaux "a moitié dynamiques"
    Par barthelv dans le forum C
    Réponses: 4
    Dernier message: 31/07/2003, 15h30
  5. Réponses: 4
    Dernier message: 15/12/2002, 04h19

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