|
Débuté par Monsieur AURAY-LORIVAL, 28 mar. 2017 00:53 - 9 réponses |
| |
| | | |
|
| |
Membre enregistré 64 messages Popularité : -1 (1 vote) |
|
Posté le 28 mars 2017 - 00:53 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 28 mars 2017 - 02:52 |
Coucou,
Tu peut joindre deux samples de donnée ?
Charly |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : -1 (1 vote) |
|
Posté le 28 mars 2017 - 08:06 |
Biensur,
Voici deux sample de ma base:
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 939 messages Popularité : +66 (68 votes) |
|
Posté le 28 mars 2017 - 17:56 |
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 ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 939 messages Popularité : +66 (68 votes) |
|
Posté le 28 mars 2017 - 17:57 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 304 messages Popularité : +47 (51 votes) |
|
Posté le 28 mars 2017 - 20:51 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 939 messages Popularité : +66 (68 votes) |
|
Posté le 29 mars 2017 - 10:34 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 304 messages Popularité : +47 (51 votes) |
|
Posté le 29 mars 2017 - 14:22 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : -1 (1 vote) |
|
Posté le 29 mars 2017 - 23:36 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 29 mars 2017 - 23:57 |
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. |
| |
| |
| | | |
|
| | | | |
| | |
|