2012-04-05 12 views
0

i DataBase Funktion haben, dieSQL-Abfrage mit Datenbankfunktion

CREATE OR REPLACE FUNCTION distance(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT) RETURNS FLOAT AS $$ 
DECLARE             
    x float = 69.1 * (lat2 - lat1);       
    y float = 69.1 * (lon2 - lon1) * cos(lat1/57.3);   
BEGIN              
    RETURN sqrt(x * x + y * y);        
END 
$$ LANGUAGE plpgsql; 

jetzt 2 Tabellen Ich habe durch Koordinaten Abstand berechnen (mit 0.59 Beziehung) ein

Person mit Säulen genannt -> PersonId, Name, Nachname

und ein

Lage mit Spalten -> Personid, Breitengrad, Längengrad.

jetzt versuche ich, die Person zu bekommen, dass der Abstand weniger bis 5 ist mit der distnace Funktion

i mit dieser folgenden Abfrage starten bekommen kenne die id ersten

select loc.id,loc.latitude,loc.longitude from location loc 
where distance(123,456,loc.latitude,loc.longitude)<0.5 

aber nicht, wie um alle Personen mit der ID aus der obigen Abfrage zu erhalten.

Wie kann ich das tun? danke im voraus.

Antwort

2

Ist das wonach Sie suchen?

select p.*, loc.id,loc.latitude,loc.longitude 
from location loc inner join person p on (p.Personid=loc.Personid) 
where distance(123,456,loc.latitude,loc.longitude)<0.5 
+0

daaaaam du guten dank :-) – user986474

+0

Das ist sehr einfach! Lesen Sie dazu: http://www.postgresql.org/docs/8.3/static/tutorial-join.html – barsju