2016-06-29 5 views
2
SELECT 
    id, 
    (3959 * acos(cos(radians(51.509980)) * cos(radians(lat)) * cos(radians(lng) - radians(-0.133700)) + sin(radians(51.509980)) * sin(radians(lat)))) AS distance 
FROM tbl_event 
HAVING distance < 5 
ORDER BY distance 

Hier -0,133700 erstellt Problem, andere minus Werte wie -122 etc. funktionieren gut damit.Haversine Formel gibt Null in Abfrage

Bitte helfen Sie, wenn dieses Problem bekannt ist.

+0

in obiger Abfrage ii ist nicht ein Problem mit -,133700 select zeigt (3959 * acos (cos (Radiant (51,509980)) * cos (Radiant (0.0)) * cos (Radiant (0,0) - Radiant (-0.133700)) + sin (Radiant (51.509980)) * sin (Radiant (0.0)))) AS Abstand –

+0

einfach ich ersetzen Sie Ihre lat lang mit 0,0 und überprüfen Sie ihre Arbeit kann ein Problem mit Ihrem Lat, lng Koordinaten zur Verfügung auf DB können Sie diese Informationen teilen –

+0

Danke Mahesh Madushanka für Ihren Kommentar. Ich bin mir bewusst mit der Tatsache, dass es kein Problem in der Formel gibt.Basisch möchte ich 0 Entfernungsereignisse von meiner Datenbank und ich habe 2 Einträge mit gleichen lat langen Werten, die 51.50998 (lat) und -0.1337 (long) ist. Mein aktueller Standort lat lang ist ebenfalls derselbe und sollte 0 als Entfernungswert zurückgeben, aber er gibt null zurück. – Bhumika

Antwort

1

Es gibt null zurück, weil die acos-Funktion ein Argument erhält, das größer als 1 oder kleiner als -1 ist. Versuchen Sie folgendes:

Select id, 3959 * acos(if(d>1, 1, if(d<-1, -1, d))) as distance 
From (SELECT id, 
cos(radians(51.509980)) * cos(radians(lat)) * cos(radians(lng) - radians(-0.133700)) + sin(radians(51.509980)) * sin(radians(lat)) AS d 
FROM tbl_event) t1 
HAVING distance < 5 
ORDER BY distance 
+0

oohh groß Msf vtp danke es ist zurück 0. Vielen Dank – Bhumika

+0

@Bhumika Mein Vergnügen. ☺ –