[PHP] Calcul dans BDD ou en live ?

Rechercher

[PHP] Calcul dans BDD ou en live ?

Par Pone  -  3 reponses  -  Le 16/09/2009 21:24  -  Editer  - 

Hello,

Petite question de bon sens : j'ai plusieurs variables numériques à partir desquelles je dois faire un calcul. D'après-vous, vaut-il mieux faire le calcul lors de l'enregistrement dans la BDD et donc stocker le résultat dans la base, ou bien faire le calcul lorsque que le visiteur appelle la page PHP.

J'espère avoir été clair :)

Merci

 

Réponses apportées à cette discussion

Par Emacs  -  Le 16/09/2009 21:37  -  Haut de page  - 

Hello,

A vrai dire ça dépend. Lorsqu'il s'agit de lourds calculs, il est préférable de le faire avant et de le mettre en cache (en base, dans un fichier, dans la mémoire...). Cependant, nous ne savons pas exactement ce que tu cherches à faire... Peux-tu en dire plus stp ?

Hugo.

 
Par Cyrano  -  Le 16/09/2009 21:51  -  Haut de page  - 

Salut Pone,

D'une manière générale, on ne stocke en principe jamais de valeurs calculées dans une base de données. Cependant comme l'a dit Emacs, « ça dépend ».

Mais je vais quand même prendre un exemple basique : si les valeurs variables sont des prix hors taxe et un taux de taxe par exemple, il est parfaitement logique de n'effectuer les calculs qu'à la demande parce que le prix hors-taxes peut évoluer, le taux de taxation égalemen. Or si tu stockes un prix TTC, la valeur deviendra fausse.

Donc je dirais la même chose que Emacs, il faudrait savoir dans quelle catégorie peuvent se classer tes variables originales. J'ajoute tout de même un détail : si tu as besoin des valeurs calculées lors de la consultation des pages, il est possible de mettre des calculs dans la requête de sélection et donc lorsque tu consultes les données pour les affichées, tu pars de valeurs non calculées mais ta requête peut retourner des valeurs calculées sur la base de plusieurs colonnes. Reprenons l'exmple des prix et taxes, tu pourrais faire de la consultation de cette manière :

SELECT
  (p.prix * t.taxe) prix_ttc
FROM t_produit p, t_taxes t
WHERE p.prod_id = 123456
  AND t.tax_id = 1;

Le retour sera une seule donnée qui correspondra au prix ttc du produit dont l'identifiant serait 123456 et le taux de taxe applicable serait identifié par 1, le tout avec un alias prix_ttc.

 
Par Pone  -  Le 16/09/2009 22:07  -  Haut de page  - 

Ok, en fait mon calcul ne va pas aller chercher bien loin mais je ne peux pas m'étaler sur le bazar car c'est assez spécifique et particulier à expliquer mais en gros j'aurais entre 5 et 10 nombres à faire intervenir dans un calcul. Donc je stocke ces nombres en BDD, normal ensuite et après vous avoir lu, je pense utiliser soit ta méthode de faire l'opération directement dans le requête, soit de calculerà l'appel de la page.

Je pense que je devrais ferais quelques tests de vitesse.

Pour info les opérations seront basiques : addition, soustration.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |