2009-05-14 5 views
3

J'écris une application et en utilisant MySQL pour retourner la différence entre 2 dates dans MySQL si MySQL le fait ou devrais-je laisser PHP le gérer?Combien de calculs devraient être faits par MySQL?

J'ai aussi juste besoin de la somme de tous les résultats que je reçois si je les retourne et les additionne du côté php ou y a-t-il un moyen d'additionner tous les résultats du côté serveur MySQL?

Répondre

4

Cela dépend un peu de l'application, mais en général, je la pousserais vers le PHP, parce que normalement vous construisez un site web pour plusieurs accès simultanés; pourquoi mettre le calcul dans la base de données et potentiellement avoir un goulot de bouteille?

0

Il n'y a pas de bonne réponse à cela. Je fais personnellement autant que possible en SQL mais surtout parce que je peux, pas parce que je devrais.

Et oui, vous pouvez demander à MySQL de calculer une somme:

SELECT id, SUM(price) FROM items GROUP BY id WITH ROLLUP 

Le dernier résultat, celui avec l'ID est NULL, va contenir somme pour toutes les lignes.

0

Si c'est des milliers de nombres différents, j'essaierais de le faire du côté de la base de données. Ce que Charlie a dit est à peu près l'habituel. Je fais souvent des calculs dans une base de données et je les ajoute en tant que colonne supplémentaire au cas où je devrais faire le tri côté serveur, mais ce n'est évidemment pas votre cas.

1

Je pense que vous avez deux cas séparés ici. Dans le cas où vous renvoyez deux valeurs et effectuez un calcul sur celles-ci, il est probablement plus logique de le faire sur le frontal tant que ce n'est pas un calcul complexe qui nécessite une logique métier significative. Si cela implique une logique métier complexe ou spécialisée, vous devriez avoir une place centrale pour cette logique, que ce soit dans une couche de gestion ou dans la base de données, de manière à ce que cela soit fait de manière cohérente. Si vous trouvez juste la différence entre deux dates ou quelque chose, alors faites-le simplement au début. Dans le second cas, où vous additionnez des valeurs, cela ressemble à quelque chose qui devrait probablement être fait dans la base de données. Les réseaux ont tendance à être beaucoup plus un goulot d'étranglement que les bases de données modernes sur le matériel d'aujourd'hui. Enregistrer l'envoi d'un groupe de lignes sur le réseau juste pour les ajouter si vous pouvez simplement le faire dans la base de données.

Questions connexes