|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2004 Messages : 15 ![]() |
Bonjour,
Je cherche a calculer une somme en php-mysql. Actuellement la somme est effectuée dans le code php mais je me disais que ce serait surement plus rapide dans le code sql directement. J'aimerais donner différents poid selon qu'un id se trouve dans tel ou tel group de valeur genre en pseudo code: Code :
Code :
PS: Il s'agit d'un serveur MySQL version 3.23 |
||||
|
|
00
|
|
|
#2 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
A mon avis il est beaucoup plus simple de gérer ce genre de choses dans du code PHP.
Enfin il y a toujours la fonction CASE ... WHEN (http://dev.mysql.com/doc/mysql/fr/Co...functions.html) mais je doute qu'on puisse l'utiliser dans un GROUP BY
__________________
Pensez au bouton
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
Exemple d'usage de la fonction CASE :
http://www.developpez.net/forums/viewtopic.php?t=192952
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : avril 2004 Messages : 43 ![]() |
oui, je pense que tu devrais passer par les fonctions IF, CASE, IFNULL, etc.
un SUM(IF(...)) est possible, mais un SUM(CASE ...) si tu peux arriver à gérer cela au niveau de la base plutôt qu'au niveau de l'appli, c'est le top. toutes les opérations de regroupements, tris, calculs simples, etc. doivent être au maximum faites au niveau du SGBD : c'est fait pour ça et c'est plus rapide ! |
|
|
00
|
|
|
#5 | |||
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
Citation:
Code :
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|||
|
|
00
|
|
|
#6 | ||
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Après vérification, un
Code :
Ca m'étonne parce qu'il me semble que j'avais déjà essayé, sans résultat. Enfin tant mieux Au niveau de la vitesse, tout dépend du nombre de id_doc. S'il n'y en a que quelques-uns, il n'y aura pas grande différence entre calculer la somme dans la requête et dans le script PHP. Par contre s'il y en a des centaines, c'est sûr que ça économisera du transfert entre le serveur et le script. Après, pour des calculs et traitements un peu complexes, je serais plutôt partisan de les laisser dans le code, pour des raisons de lisibilité. Après tout le langage SQL n'est pas tellement fait pour gérer la logique conditionnelle à la base...
__________________
Pensez au bouton
|
||
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2004 Messages : 15 ![]() |
Excellent !!!
Ca marche ! en fait la table a environ 4'000 doc_id et 16'000 id ce qui fait environ 260'000 entrée en tout. (faut dire que c'est un peu une base test, la vrai sera plus petite). Je vais faire des tests sur les différences de performences en temps entre les deux solution et je posterais les résultats si ca intéresse quelqu'un. Mais ceci semble permettre de retourner que trente résultats ou avant il y avait 3'000 doc_id différents (donc beaucoup de communication inter-processus).. Merci encore ! |
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
Citation:
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
|
00
|
|
|
#9 | |||
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
Citation:
__________________
Pensez au bouton
|
|||
|
|
00
|
|
|
#10 | ||||||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2004 Messages : 15 ![]() |
Bon voila quelque résultat sans que j'ai optimiser tous ce que ceci me permettra d'optmiser.
Les test ont été effectuer sur un ordinateur avec une mémoire de 256mb sur window$ ce qui explique les temps long. Auparavant j'avais regarder sur un ordi avec 512 sur linux le temp total était d'environ 1.3 secondes. Requete SQL (requete avec environ 2500 résultat) Code :
Code :
Code :
Ca fait quand même une bonne amélioration des performences. Si j'utilise LIMIT les temps descende vers un total de 4 seconde le probleme est que je dois connaitre le nombre de résultat total et qu'il n'est pas possible de l'avoir avec MySQL 3.23 (a ce que je sache). Donc la toujours si vous avez des idées.... Merci encore |
||||||
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2004 Messages : 15 ![]() |
Tout ceci m'a permis de voir une optimisation absolument essentiel que j'aurais du voir plus tôt
A ce stade la différence est encore plus grande car j'arrive à 0.6 seconde pour la nouvelle méthode en tout Alors que l'ancienne (mais optimisée) prend environ 4 secondes dont 1.5 seconde de requète sql ( soit 2.5 seconde de code php). |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com