2012-04-05 3 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 таблицы (с 12:59 отношения) один называется

человек с колоннами -> PersonId, имя, фамилия

и один

расположение с колонками -> Личность, широта, долгота.

Теперь я стараюсь, чтобы получить человек, что расстояние меньше на 5 с помощью функции distnace

я начать с этим следующим запросом, чтобы получить идентификатор первого

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

, но не знаю, как чтобы получить всех лиц с идентификатором из вышеуказанного запроса.

, как я могу это сделать? благодарит заранее.

ответ

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

+0

Это очень простой! Читайте: http://www.postgresql.org/docs/8.3/static/tutorial-join.html – barsju

Смежные вопросы