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 via SUM et IN (2 requêtes en 1)


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut Calcul via SUM et IN (2 requêtes en 1)
    Bonjour à tous,
    J'ai un petit problème qui me prend bien le choux depuis plusieurs jours, je suis sure d’avoir la solution mais impossible de la mettre en place.

    J'ai plusieurs tables, une table avec des nom, prénom et id (auto incrémentés), une autre avec des formations le nombre d'heures l'id de la formation etc... et la dernière avec les id des stagiaires des formation regroupant l'id de la formation et celle de l'id de la personne.

    Je dois calculer le nombre d'heures effectué par chacun. J'arrive à obtenir dans un tableau html les id, les nom, prénom, et heures. Mais je n'arrive pas a faire le totale des heures.
    Dans mon tableau les stagiaire se répète plusieurs fois comme ils ont fait plusieurs formation , pour cela ya pas de problème. Mais impossible de calculer le total pour chacun alors que j'obtiens sur plusieurs lignes les différentes heures.

    Je suis sur que en faisant cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql4 = "SELECT SUM('heures_valides_totales') AS heures_totales FROM form_formations WHERE id_formation IN (SELECT id_formation FROM form_stagiaires_formations WHERE id_stagiaire=$id_exp)";
    Cela fonctionnerait mais en la testant dans MySql directement j'obtiens 0. Et c'est pas bon !

    J'ai vraiment besoins d'un coup de mains.

    Si j'ai pas bien expliqué je m'en excuse c'est assez compliqué à comprendre alors à expliquer c'est pas mieux .
    Si jamais vous voulez mon code entier je le mettrais. Mais pour l'instant je ne comprend pas pourquoi j'obtiens 0 avec la requête ci dessus.

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    si tu obtiens bien tes données individualisées, pourquoi au moment du rendu ligne par ligne tu ne calcules pas en PHP toi-même la somme des heures affichées ?

    EDIT : ton sql devrait ressembler plutôt à ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
           SUM(f.heures_valides_totales) AS heures_totales 
      FROM 
           form_formations f
           INNER JOIN form_stagiaires_formations s ON f.id_formation = s.id_formation
     WHERE
           s.id_stagiaire = TON_ID

    Tu as fait une erreur : SUM('heures_valides_totales'), c'est SUM(heures_valides_totales)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Voila 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
    $result = mysql_query("SELECT * FROM cav_experts ORDER BY nom")or die("Erreur SQL : $query<br/>".mysql_error());
    while($row=mysql_fetch_array($result))
    {
        $row=mysql_fetch_array($result);
        $id_exp=$row['id_expert'];
        $nom = $row['nom'];
        $prenom = $row['prenom'];
     
        $result2 = mysql_query("SELECT * FROM form_stagiaires_formations WHERE id_stagiaire=$id_exp")or die("Erreur SQL : $query<br/>".mysql_error());
     
        while ($row2 = mysql_fetch_array($result2)) 
        {
            $id_form=$row2['id_formation'];
            $id_stag=$row2['id_stagiaire'];
     
            //$sql3 = "SELECT * FROM formexpemod1.form_formations WHERE id_formation=$id_form";
            $sql4 = "SELECT SUM('heures_valides_totales') AS heures_totales FROM form_formations WHERE id_formation IN (SELECT id_formation FROM form_stagiaires_formations WHERE id_stagiaire=$id_exp)";
            echo "$sql4<br>";
            $result3 = mysql_query($sql4) or die("Erreur SQL : $query<br/>".mysql_error());
     
            $row3 = mysql_fetch_array($result3);
            echo $heures_totales;
            $heures_valides_totales = $row3['heures_valides_totales'];
     
            /********************/
     
            if($id_exp===$id_stag)
            {
            $totale_heures=$totale_heures + $heures_valides_totales;
            }
            //echo "<tr><td>$id_exp</td><td>$nom</td><td>$prenom</td><td>$heures_valides_totales</td><td>$totale_heures</td></tr>";
        }
     
        echo "<tr><td>$id_exp</td><td>$nom</td><td>$prenom</td><td>$heures_valides_totales</td><td>$totale_heures</td></tr>";
    }
    Avec ou sans les ' cela ne fonctionne pas.
    A vous de voir si vous comprenez.

    Autant pour moi les ' font bien merder parcontre la requete passe quand même. Elle pas dans PHPMYADMIN mais dans le le code.... T_T

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu as une erreur ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $heures_totales;
    $heures_valides_totales = $row3['heures_valides_totales'];
    ça devrait être plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $heures_totales = $row3['heures_totales'];
    echo $heures_totales;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Bon le probleme précédent est plus ou moins résolu, mais en restant dans la ligné mes heures sont dupliqué, je n'arrive pas a faire quoi que ce soit avec le iset.
    Voila le resultat en image:Nom : Capture7.PNG
Affichages : 78
Taille : 26,4 Ko

    Et 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    $sql1="SELECT DISTINCT year(date_debut) Annee1 FROM form_formations WHERE date_debut <> 0000-00-00";
    						$result1 = mysql_query($sql1)or die("Erreur SQL : $query<br/>".mysql_error());
    					// while($row1=mysql_fetch_array($result1))
    					// {
    					// $annees_test=$row1['Annee1'];
    					// $tab_ans[$annees_test];
    					// echo"<th>$annees_test</th>";
    					// }
     
    					$indice=0;
    					while($row1=mysql_fetch_array($result1)) 
    					{ 
    						$annees_test=$row1['Annee1']; 
    						$tab_ans[$indice] = $annees_test; 
    						echo"<th>$annees_test</th>"; 
     
     
    						$indice++;
    					}
    					/***/
    					// foreach ($tab_ans as $annees_tab){
     
    									// echo"$annees_tab<br>";
     
    							// }
    					/***/
    						?>
                        </tr>
                    </thead>
                    <tbody>
                        <?php
     
     
     
    					$result = mysql_query("SELECT * FROM cav_experts ORDER BY nom")or die("Erreur SQL : $query<br/>".mysql_error());
    					while($row=mysql_fetch_array($result))
    					{
    						$row=mysql_fetch_array($result);
    						$id_exp=$row['id_expert'];
    						$nom = $row['nom'];
    						$prenom = $row['prenom'];
    						//echo"haha";
    						$result2 = mysql_query("SELECT * FROM form_stagiaires_formations WHERE id_stagiaire=$id_exp")or die("Erreur SQL : $query<br/>".mysql_error());
     
    						while ($row2 = mysql_fetch_array($result2)) 
    						{
    							$id_form=$row2['id_formation'];
    							$id_stag=$row2['id_stagiaire'];
    							//echo"<br>$id_form<br>";
    							//$sql3 = "SELECT * FROM formexpemod1.form_formations WHERE id_formation=$id_form";
    							//$sql4 = "SELECT SUM('heures_valides_totales') AS heures_totales FROM form_formations WHERE id_formation IN (SELECT id_formation FROM form_stagiaires_formations WHERE id_stagiaire=$id_exp)";
    							$sql5 = "SELECT SUM(heures_valides_totales) AS heures_totales FROM form_formations WHERE id_formation IN (SELECT id_formation FROM form_stagiaires_formations WHERE id_stagiaire=$id_exp AND date_participation <> 0000-00-00)";
    							//echo "$sql4<br>";
    							$result5 = mysql_query($sql5) or die("Erreur SQL : $query<br/>".mysql_error());
     
    							$row5 = mysql_fetch_array($result5);
    							//echo $heures_totales;
    							$heures_valides_totales = $row5['heures_valides_totales'];
    							$totale_heures = $row5['heures_totales'];
    								//$heures=$row3['heure_valides_totales'];
    								//echo "ID: $id_exp"; echo $row['nom']; echo"Heures: $heures_valides_totales <br>"; //['id_expert']; echo $row['nom']; echo $heures;
     
    						}
    						/***************/
    						echo "<tr><td>$id_exp</td><td>$nom</td><td>$prenom</td><td>$totale_heures</td>";
    						/***************/
                foreach ($tab_ans as $annees_tab){
                  // $sql6 = "SELECT MAX(date_participation) AS Max_Date, MIN(date_participation) AS Min_Date FROM form_stagiaires_formations WHERE id_formation=$id_form";
    							$sql6 = "SELECT SUM(heures_valides_totales) AS heures_dates, YEAR (date_debut) Annee FROM form_formations WHERE id_formation IN (SELECT id_formation FROM form_stagiaires_formations WHERE id_stagiaire=$id_exp AND date_participation <> 0000-00-00) GROUP BY YEAR (date_debut)=$annees_tab";
    							$result6 = mysql_query($sql6) or die("Erreur SQL : $query<br/>".mysql_error());
                  $row6 = mysql_fetch_array($result6);
                  $Annee = $row6['Annee'];
    							$heures_tot = $row6['heures_dates'];							
    							// echo $row6[0];
    							//echo $heures_dates;
     
                  if (@mysql_num_rows($result6)>0){
    					//if (isset($row6[0])){
    									echo"<td>$heures_tot</td>";
    									 // echo"<td>$Annee</td>";
    									  //echo"<td>$row6[0]</td>";
    							}else{
    							echo"<td> - </td>";
    							}
    						}
     
     
     
     
    						/*************/
    						echo"</tr>";
    					}
                        ?>
                    </tbody>
    Le probleme se trouve principalement au niveau du iset:
    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
    foreach ($tab_ans as $annees_tab){
                  // $sql6 = "SELECT MAX(date_participation) AS Max_Date, MIN(date_participation) AS Min_Date FROM form_stagiaires_formations WHERE id_formation=$id_form";
    							$sql6 = "SELECT SUM(heures_valides_totales) AS heures_dates, YEAR (date_debut) Annee FROM form_formations WHERE id_formation IN (SELECT id_formation FROM form_stagiaires_formations WHERE id_stagiaire=$id_exp AND date_participation <> 0000-00-00) GROUP BY YEAR (date_debut)=$annees_tab";
    							$result6 = mysql_query($sql6) or die("Erreur SQL : $query<br/>".mysql_error());
                  $row6 = mysql_fetch_array($result6);
                  $Annee = $row6['Annee'];
    							$heures_tot = $row6['heures_dates'];							
    							// echo $row6[0];
    							//echo $heures_dates;
     
                  //if (@mysql_num_rows($result6)>0){
    					if (isset($row6[0])){
    									echo"<td>$heures_tot</td>";
    									 // echo"<td>$Annee</td>";
    									  //echo"<td>$row6[0]</td>";
    							}else{
    							echo"<td> - </td>";
    							}
    						}
    Merci d'avance

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

Discussions similaires

  1. Calcul d'un rang dans une requête
    Par rossy dans le forum Access
    Réponses: 7
    Dernier message: 26/07/2018, 20h17
  2. [MySQL] Calcul d'une somme dans une boucle VERSUS Calcul via la fonction MySQL SUM
    Par 2o1oo dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 13/10/2010, 10h32
  3. erreur de calcul avec SUM
    Par peyro51 dans le forum Excel
    Réponses: 6
    Dernier message: 14/07/2007, 10h14
  4. [Requête/SQL]Calcul d'un solde dans une requête ou un état
    Par alalau dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/04/2007, 17h02
  5. Calcul à partir des résultats d'une requète
    Par Sendo dans le forum Access
    Réponses: 1
    Dernier message: 29/09/2005, 18h46

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