Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/02/2011, 10h17   #1
Invité de passage
 
Inscription : mars 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 14
Points : 0
Points : 0
Par défaut calcul avec php

bonjour;
je suis débutant en programmation php et je veux réaliser une formule de calcul :

j'ai trois champs dynamiques dans ma table et je veux appliquer cette formule au troisième champ :

champ3 = (champ2-champ1)/100

sachant que les trois champs appartiennent à la même table

et afficher bien sur mon champ3
pitchoblack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 12h06   #2
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
Bonjour,

Il faut faire une requête SQL de base :

Ex avec mysql :
Code :
1
2
3
4
5
 
$requete = mysql_query('SELECT ((champ2 - champ1) / 100) AS mon_calcul FROM ma_table');
$calcul = mysql_result($requete, 0, 'mon_calcul');
 
echo '<span class="calcul">La valeur de mon calcul est '.$calcul.'</span>';
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 12h22   #3
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 708
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 708
Points : 3 278
Points : 3 278
Salut

Citation:
Envoyé par pitchoblack
champ3 = (champ2-champ1)/100
Ce n'est pas forcément une bonne idée de créer un champ qui sera totalement dépendant de 2 autres données situé juste à coté.

Théoriquement (donc vraiment en théorie), il est préférable de faire le calcul "à la volée", à la demande.
Dans le jargon, on on appel ça des données redondantes, c'est quasi de la duplication de données.
On retrouve tout de même ce genre de chose, mais c'est très souvent pour des questions d'optimisations qu'on transgresse un peu ces bonnes règles.


Donc d'enregistrer uniquement les 2 champs en Bdd, puis si on souhaite obtenir le calcul sur ces 2 champs, et bien faire la requête suivante :
Code :
1
2
3
 
SELECT truc, muche, ((champ2-champ1)/100) AS champ3, champ4
FROM ma_table
Et on aura ici au total 4 champs, donc champ3 du calcul


Mise à part ça, et si tu veaux quand même avoir ce champ3 dans la table avec le calcul, alors il faut que le calcul soit fait au-préalable, aussi bien lors de l'insertion (INSERT INTO) de même qu'à la mise à jour (UPDATE).
- A l'insertion, en toute logique le calcule devra être fait avec les données qu'on doit avoir sur le coude, vu que l'enregistrement n'existe pas encore.
- Pour un UPDATE, là on pourra le faire coté SQL, en utilisant le même code que plus haut. (UPDATE ... SET champ3 = (champ2-champ1)/100 ...).

Mais j'insiste, il faut bien voir que si on effectue une modification sur le champ1 ou le champ2, que ce soit via une application en Php ou directement dans la Bdd (genre PhpMyAdmin), il ne faudra pas oublier de mettre à jour le champ3 aussi, sinon ça débouche sur des incohérences.
C'est pour ça que ce n'est pas recommandé.
En faisant "à la volée", le calcul sera toujours correcte.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/02/2011, 12h29   #4
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
Je me demande si tu ne souhaitais pas mettre à jour ta table directement, si c'était le cas :

Code :
1
2
 
UPDATE ma_table SET champ3 = ((champ2 - champ1) / 100)
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h18.


 
 
 
 
Partenaires

Hébergement Web