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

Langage PHP Discussion :

Refaire un calcul avec des variables SUM


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut Refaire un calcul avec des variables SUM
    Bonjour, je sollicite votre aide, car je suis un peu perdu depuis 4-5 jours.
    J'ai essayé de trouver une réponse dans les forums, mais étant débutant, je me perd parmi toutes les informations.
    Mon soucis est que je calcul les valeurs recette et dépense de mon tableau avec une requête SUM.
    Jusque là tout va bien
    Le résultat de chaque colonnes est juste.
    Seulement, lorsque j’essaie de refaire un calcul avec ces 2 valeurs (recette - dépense), je n'ai pas d'erreur SQL, mais un résultat fantaisiste.
    Pourriez vous me dire où est mon erreur ?
    Je vous met ici mon code PHP :
    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
    <table align="center" border="1" width="1010px;" style="background-color:#ffffff;">
    	<tr>
    		<td align="center" width="33%"><strong>Total Recette</strong></td>
    		<td align="center" width="33%"><strong>Total D&eacute;pense</strong></td>
    		<td align="center" width="33%"><strong>Cr&eacute;dit - D&eacute;bit</strong></td>
    	</tr>
    	<tr>
    		<?php
     
    		$reponse = $bdd->query('SELECT SUM( montant_recette ) AS total_montant FROM recette WHERE annee=\'2012\'');
     
    		while ($donnees = $reponse->fetch())
    		{
    		?>
    		<td align="center" width="33%"><strong><?php echo $donnees['total_montant']; ?></strong></td>
    		<?php
    		}
    		$reponse->closeCursor();					 
    		?>
    		<?php
     
    		$reponse = $bdd->query('SELECT SUM( montant_depense ) AS total_montant FROM depense');
     
    		while ($donnees = $reponse->fetch())
    		{
    		?>
    		<td align="center" width="33%"><strong><?php echo $donnees['total_montant']; ?></strong></td>
    		<?php
    		}
    		$reponse->closeCursor();					 
    		?>
    		<?php
     
    		$reponse = $bdd->query('SELECT SUM( montant_recette ) AS total_montant_recette,
    								SUM( montant_depense ) AS total_montant_depense
    								 FROM recette, depense WHERE annee=\'2012\'');
     
    		while ($donnees = $reponse->fetch())
    		{
    		?>
    		<td align="center" width="33%"><strong><?php echo $donnees = ($donnees['total_montant_recette'] - $donnees['total_montant_depense']); ?></strong></td>
    		<?php
    		}
    		$reponse->closeCursor();					 
    		?>
    	</tr>
    </table>
    Merci d'avance pour votre aide.

  2. #2
    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
    Bonjour,

    ton souci vient d'un problème lié au SQL.
    Quand tu fais ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM recette, depense
    tu fais en fait une multiplication cartésienne de tes données !

    Tu devrais plutôt conserver dans 2 variables distinctes les totaux des requêtes précédentes et afficher leur différence à l'endroit désiré.

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    Merci de ta réponse rawsrc.
    Mais comment faire pour récupérer les données dans 2 variables différentes ?
    Je débute, et je ne connais pas encore toutes les subtilités
    Dois-je faire une variable ['Total_Montant_Recette'] et une autre ['Total_Montant_Depense'] ?
    Et appeler le résultat par :
    <?php echo $donnees = $donnees['total_montant_recette']-$donnees['total_montant_depense']; ?>
    Mais je ne vois pas quoi mettre en requête SQL pour rappeler ces 2 variables.
    Merci encore pour ton aide

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Par défaut
    Bonjour,

    En fait le principe serait de ne pas faire cette troisième requète sql . Après tout tu as déjà toute les données nécessaire dans les deux première non ? .

    Dans tes boucles tu pourrais rajouter ce genre de ligne $total_montant_recette = $donnees['total_montant']et
    $total_montant_depense = $donnees['total_montant']?



    Ensuite plus qu'un petit <?php echo $total_montant_recette - $total_montant_depense; ?>.

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    Merci Terra126, mais comme je l'ai dis, je débute en PHP.
    Mais j'essaie de me soigner en apprenant
    Je n'arrive pas à mettre les syntaxes que tu me donne.
    J'ai essayé de faire :
    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
     
    $reponse = $bdd->query('SELECT SUM( montant_recette ) AS total_montant FROM recette WHERE annee=\'2012\'');
     
    $total_montant_recette = $donnees['total_montant']
     
    while ($donnees = $reponse->fetch())
    {
    ?>
    <td align="center" width="33%"><strong><?php echo $donnees['total_montant']; ?></strong></td>
    <?php
    }			
    $reponse->closeCursor();					 
    ?>
    <?php
     
    $reponse = $bdd->query('SELECT SUM( montant_depense ) AS total_montant FROM depense');
     
    $total_montant_depense = $donnees['total_montant']
     
    while ($donnees = $reponse->fetch())
    {
    ?>
    <td align="center" width="33%"><strong><?php echo $donnees['total_montant']; ?></strong></td>
    <?php
    }
    $reponse->closeCursor();					 
    ?>
    <td align="center" width="33%"><strong><?php echo $total_montant_recette - $total_montant_depense; ?></strong></td>
    Mais ça me donne une erreur de syntaxe sur la boucle :
    Parse error: syntax error, unexpected 'while' (T_WHILE)
    Je ne sais pas si ça vient des fermetures des boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    }
    $reponse->closeCursor();					 
    ?>
    ou si je place mal mes requêtes.

  6. #6
    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,

    comme ç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
    <?php
     
    $reponse = $bdd->query('SELECT SUM( montant_recette ) AS total_montant FROM recette WHERE annee="2012" GROUP BY annee');
    $data    = $reponse->fetch();
    $recette = $data['total_montant'];
     
    $reponse = $bdd->query('SELECT SUM( montant_depense ) AS total_montant FROM depense');
    $data    = $reponse->fetch();
    $depense = $data['total_montant'];
     
    $solde   = $recette - $depense;
    ?>
    <td align="center" width="33%"><strong><?php echo $recette ?></strong></td>
    <td align="center" width="33%"><strong><?php echo $depense ?></strong></td>
    <td align="center" width="33%"><strong><?php echo $solde ?></strong></td>
    Quelques conseils :
    - tu dois essayer de structurer ton code : mettre toujours le PHP au début du script et renvoyer le HTML en fin de script,
    - ne te préoccupes pas de fermer le curseur, PHP le fait pour toi et c'est beaucoup plus rapide
    - quand tu travailles avec des fonction de regroupement (SUM()) pense à toujours mettre en GROUP BY les champs sur lesquels portent le filtre sinon tu vas avoir des résultats imprévus (c'est lié au fonctionnement du moteur MySQL)

    Tu avais oublié le ; en fin de ligne 5 d'où l'erreur.

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    Un grand merci rawsrc, ça fonctionne nickel
    Par contre, pourrais tu m'éclairer sur tes dires ?
    J'ai vraiment envie d'apprendre, et pas juste me contenter que ça marche
    Quand tu dis :
    ne te préoccupes pas de fermer le curseur, PHP le fait pour toi et c'est beaucoup plus rapide
    Pourtant si je ne met pas mon "close cursor" après ma requête, j'ai des erreurs.
    Cela est-il du au fait que j'utilise plusieurs requêtes sur ma page ?
    Premier tableau listant toutes les recettes, deuxième tableau listant toutes les dépenses et ensuite troisième tableau avec total recette - total dépense.
    quand tu travailles avec des fonction de regroupement (SUM()) pense à toujours mettre en GROUP BY les champs sur lesquels portent le filtre
    Quel est l'utilité de grouper les informations puisque je demande déjà à SQL de mettre si annee = 2012 (WHERE annee=\'2012\') ?
    sinon tu vas avoir des résultats imprévus (c'est lié au fonctionnement du moteur MySQL)
    Tu veux dire que SQL a besoin de plus d'information lorsqu'il fait des calculs ?
    Encore un grand merci pour ton aide et pour éclairer mon ignorance

  8. #8
    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,

    pour le curseur, tu trouveras ici un peu d'explications
    Pour les colonnes à mettre dans le group by, j'ai confondu avec les colonnes sélectionnées (oublie ce que j'ai dit, je m'ai trompé ).

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/02/2014, 16h22
  2. [WebI XiR2] Graphique camembert avec des variables et un calcul sur les variables
    Par colom dans le forum Débuter
    Réponses: 0
    Dernier message: 12/02/2014, 15h02
  3. [XL-2010] Calculer avec des variables 32bit
    Par petitours dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/11/2013, 10h42
  4. Probleme de syntaxe avec des calculs integrant des variables
    Par trigger00 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/06/2009, 10h20
  5. Réponses: 4
    Dernier message: 15/12/2002, 05h19

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