|
Iniciado por Monsieur AURAY-LORIVAL, 28,mar. 2017 00:53 - 9 respuestas |
| |
| | | |
|
| |
Miembro registrado 64 mensajes Popularité : -1 (1 vote) |
|
Publicado el 28,marzo 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 |
| |
| |
| | | |
|
| | |
| |
Publicado el 28,marzo 2017 - 02:52 |
Coucou,
Tu peut joindre deux samples de donnée ?
Charly |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 64 mensajes Popularité : -1 (1 vote) |
|
Publicado el 28,marzo 2017 - 08:06 |
Biensur,
Voici deux sample de ma base:
|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 939 mensajes Popularité : +66 (68 votes) |
|
Publicado el 28,marzo 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 ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 939 mensajes Popularité : +66 (68 votes) |
|
Publicado el 28,marzo 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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.304 mensajes Popularité : +47 (51 votes) |
|
Publicado el 28,marzo 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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 939 mensajes Popularité : +66 (68 votes) |
|
Publicado el 29,marzo 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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.304 mensajes Popularité : +47 (51 votes) |
|
Publicado el 29,marzo 2017 - 14:22 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 64 mensajes Popularité : -1 (1 vote) |
|
Publicado el 29,marzo 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 |
| |
| |
| | | |
|
| | |
| |
Publicado el 29,marzo 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. |
| |
| |
| | | |
|
| | | | |
| | |
|