|
Started by Monsieur AURAY-LORIVAL, Mar., 28 2017 12:53 AM - 9 replies |
| |
| | | |
|
| |
Registered member 64 messages Popularité : -1 (1 vote) |
|
Posted on March, 28 2017 - 12:53 AM |
Bonjour à tous,
J'ai une table mysql et avec une colonne latitude et une colonne longitude et j'essaie de faire une sélection dans la clause WHERE sur les coordonnées à moins d'une certaine distance donnée. Pour cela je passe 3 paramètres : une latitude, une longitude, et la distance max que je veux. Ca ne plante pas mais la requête retourne aucun résultats. Je l’exécute avec la fonction SQLExecWDR avec les paramètres associés.
Ma requête :
SELECT moi.IDPlace AS IDPlace, moi.Latitude AS Latitude, moi.Longitude AS Longitude,
FROM moi WHERE (6371 * ACOS( ROUND( COS( radians( moi.Latitude ) ) * COS( radians( {setlatitude} ) ) * COS( radians( {setlongitude} ) - radians( moi.Longitude ) ) + SIN( radians(moi.Latitude ) ) * SIN( radians( {setlatitude} ) ) , 10 ) ) ) <= {distanceMax} ORDER BY IDPlace ASC
Merci à vous |
| |
| |
| | | |
|
| | |
| |
Posted on March, 28 2017 - 2:52 AM |
Coucou,
Tu peut joindre deux samples de donnée ?
Charly |
| |
| |
| | | |
|
| | |
| |
Registered member 64 messages Popularité : -1 (1 vote) |
|
Posted on March, 28 2017 - 8:06 AM |
Biensur,
Voici deux sample de ma base:
|
| |
| |
| | | |
|
| | |
| |
Registered member 940 messages Popularité : +66 (68 votes) |
|
Posted on March, 28 2017 - 5:56 PM |
bonjour,
votre requête à première vue semble juste, du moins le calcul de la distance.
si vous lancer sur votre serveur MySQL la requête suivante :
SELECT moi.IDPlace AS IDPlace, moi.Latitude AS Latitude, moi.Longitude AS Longitude, (6371 * ACOS( Round( Cos( radians( moi.Latitude ) ) * Cos( radians( 41.6203590 ) ) * Cos( radians( 8.974535 ) - radians( moi.Longitude ) ) + Sin( radians(moi.Latitude ) ) * Sin( radians( 41.6203590 ) ) , 10 ) ) ) AS distance FROM moi ORDER by IDPlace Asc
voir exactement ce que votre serveur vous retourne, ( sans passer par windev ), çà donne quoi ? |
| |
| |
| | | |
|
| | |
| |
Registered member 940 messages Popularité : +66 (68 votes) |
|
Posted on March, 28 2017 - 5:57 PM |
ah en fait,
le texte de votre requête c'est exactement ce que vous exécutez ?
car il y a une virgule en trop dans le select
comme si vous aviez une 4ème rubrique extraite |
| |
| |
| | | |
|
| | |
| |
Registered member 1,304 messages Popularité : +47 (51 votes) |
|
Posted on March, 28 2017 - 8:51 PM |
Christophe a écrit :
ah en fait,
le texte de votre requête c'est exactement ce que vous exécutez ?
car il y a une virgule en trop dans le select
comme si vous aviez une 4ème rubrique extraite Christophe a écrit :
C'est correcte la 4ème info est la distance
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
Registered member 940 messages Popularité : +66 (68 votes) |
|
Posted on March, 29 2017 - 10:34 AM |
re bonjour,
en fait j'ai reproposé une requête avec en 4eme rubrique la distance pour voir ce que le serveur MySQL calculait. Mais sur le tout premier message, il y a une virgule en trop car seulement 3 rubriques extraites du fichier 'MOI' et il y a une virgule après la troisième rubrique...
c'est cela que vous indiquer |
| |
| |
| | | |
|
| | |
| |
Registered member 1,304 messages Popularité : +47 (51 votes) |
|
Posted on March, 29 2017 - 2:22 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 64 messages Popularité : -1 (1 vote) |
|
Posted on March, 29 2017 - 11:36 PM |
Merci à vous, le problème à été résolu, J'ai crée une colonne Distance dans ma table et il faut faire la formule dans le SELECT et non dans le WHERE et je précise que pour qu'il réponde à ma condition j'ai du utilisé la clause HAVING à la place de la clause WHERE
SELECT moi.IDPOI AS IDPOI, moi.Latitude AS Latitude, moi.Longitude AS Longitude, (6371 * ACOS( ROUND( COS( radians( Latitude ) ) * COS( radians( {setLatitude} ) ) * COS( radians( {setLongitude} ) - radians( Longitude ) ) + SIN( radians(Latitude ) ) * SIN( radians( {setLatitude} ) ) , 10 ) ) ) AS Distance FROM moi HAVING Distance < {DistanceMax}
Merci à vous |
| |
| |
| | | |
|
| | |
| |
Posted on March, 29 2017 - 11:57 PM |
C'est très surprenant. La 1ère requête paraissait beaucoup plus correcte que la dernière. Accessoirement je n'aime pas du tout acos( round (.... ) ) Par principe, j'effectue tous les calculs normaux, et au dernier moment, pour avoir un affichage sympa, je fais round() Mais c'est hors-sujet.
Dans le 1er message tu dis ; ça ne plante pas.
Quand tu lances la requête, tu passes par HexecuteRequete ou un truc comme ça. Il faut toujours tester les codes-retour (bien sur, le info ("Ok") est facultatif).
SI PAS HExécuteRequête ( ... Erreur ( " requete incorrecte", etc etc ) RETOUR FIN Info ( " ok ")
Parce que sans ces précautions, avec une requête totalement fausse, tu peux croire que la requête renvoie 0 ligne, mais simplement, elle ne s'exécute pas. |
| |
| |
| | | |
|
| | | | |
| | |
|