2012-04-05 219 views
0

我有計算由座標距離SQL查詢數據庫功能

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; 

現在我有2張表(具有以一對一的關係)與列一個稱爲

數據庫功能 - > PERSONID,名字,姓氏

和一個

位置與列 - > Personid,緯度,經度。

現在我嘗試使用distnace功能

我開始與這個下面的查詢來獲取ID第一

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

獲得該距離小於5的人,但不知道如何從上述查詢中獲得所有具有該ID的人員。

我該怎麼做? 在此先感謝。

回答

2

這是你在找什麼?

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你好謝謝:-) – user986474 2012-04-05 21:44:56

+0

這是非常基本的!閱讀:http://www.postgresql.org/docs/8.3/static/tutorial-join.html – barsju 2012-04-05 21:50:14