|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||||
|
Membre actif
![]() Inscription : août 2002 Messages : 291 ![]() |
Bonjour,
J'ai fait une requete select qui effectue un gros calcul. Je récupère le résultat de ce calcul dans mes colonnes Ce calcul restreint les lignes retournées (where) et les lignes sont triées selon ce calcul Code :
Si je mets le nom de l'alias dans le ORDER BY Code :
Mais si j'essaies de mettre l'alias également dans le WHERE Code :
Est-il possible de ne pas écrire plusieurs fois ce calcul ? Pour info, voici le calcul : Citation:
__________________
il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard Des fois ça malche, des fois ça malche pas. Garcimore
|
|||||||
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : février 2005 Messages : 349 ![]() |
je te conseillerais de décomposer tout ça dans une procedure stocké ty gagneras en vitesse et en transparence
|
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : août 2002 Messages : 291 ![]() |
Malheureusement je n'y connais rien en procédure stockée
__________________
il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard Des fois ça malche, des fois ça malche pas. Garcimore
|
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : août 2002 Messages : 291 ![]() |
Ah, pardon, je précise que "Vil_Longitude" et "Vil_Latitude" sont des champs d'une des tables de la requètes.
__________________
il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard Des fois ça malche, des fois ça malche pas. Garcimore
|
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Inscription : août 2002 Messages : 1 036 ![]() |
Bonjour,
A vue de nez, tu cherches les villes se trouvant dans un rayon de 100 km par rapport à une ville de référence ? S'il s'agit de ça, j'ai eu à faire ce genre de truc. Voilà le principe que j'ai utilisé. Préalablement à la requête, calcul des latitudes et longitudes maxi et mini, soit grosso modo : latitude_maxi = latitude_reference + 100 km latitude_mini = latitude_reference - 100 km longitude_maxi = longitude_reference + 100 km longitude_mini = longitude_reference - 100 km Ensuite, pour la requête : Code :
Je crois que HAVING est assez lent, mais du fait du 1er filtre effectué par le WHERE, les temps de réponse sont correctes. Il y a peut-être une meilleure solution, mais c'est tout ce que j'avais trouvé à l'époque. |
||
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : août 2002 Messages : 291 ![]() |
Salut,
C'est exactement ça mais c'est le "gros calcul" qui détermine les villes. S'il y a donc un endroit au minimum où il doit se trouver, c'est dans le WHERE
__________________
il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard Des fois ça malche, des fois ça malche pas. Garcimore
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : août 2002 Messages : 1 036 ![]() |
Bonjour,
Compte-tenu de ta réponse, j'ai voulu en avoir le coeur net. J'ai donc fait un essai comparatif de délai d'éxécution entre le calcul dans la clause 'WHERE' et ma solution. La solution que j'ai utilisée est 2 fois plus rapide, ce qui me semble logique. En effet, si le calcul se trouve dans la clause 'WHERE', il est évalué pour chaque ligne de la table ; alors qu'avec un filtre sur les coordonnées mini et maxi, il ne l'est que pour les éléments résultants du filtre. Et la clause 'HAVING' s'effectuant en dernier lieu ne s'applique que sur ces éléments. |
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Inscription : août 2002 Messages : 291 ![]() |
Salut,
Autant pour moi. Je pensais que tu me proposait une solution pour déterminer les villes concernées en te servant d'une formule à base de carré. Or, ma formule détermine les villes directement depuis un cercle. Mais en fait, tu me propose de restreindre sur un carré (simple en terme de calcul du WHERE) et le HAVING s'occupera d'éliminer toutes les villes qui ne sont pas dans le cercle. Comme il ne semble pas y avoir de possibilite de mettre quelque chose du genrecela me semble effectivement être une excellente réponse (surtout si elle est plus rapide) Merci
__________________
il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard Des fois ça malche, des fois ça malche pas. Garcimore
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com