2012-05-20 3 views
0

어쨌든 쿼리의 where 옵션의 값을 사용할 수 있습니까? 내가 할 노력하고있어 것은 PostGIS와 가진지도에 포인트를 획득하고 뷰에서뿐만 아니라 거리를 돌아입니다 그래서 나는이 그 하나의 쿼리에 대한 좋은 동안쿼리의 다른 부분에서 where 변수의 값을 사용하십시오.

SELECT name, 
     ST_Distance(ST_GeographyFromText('SRID=4326;POINT(-110 29)')::geography, location:: geography) 
FROM global_points 
WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(-110 29)'), 1000000); 

작업, 나는를 사용하고 싶어했다 이

같은 것을 모두보기 다른 테이블에서 다른 정보를 결합하고 그래서 난 그냥

SELECT * FROM view WHERE currLoc = POINT(50 50) 

할 수있는 그래서 나는 내가 노력하고있어 뷰의 나머지 부분에서 currLoc을 사용할 수있을 것입니다

CREATE VIEW testDis 
AS 
SELECT name, ST_Distance(currPos::geography, latlong::geography) 
FROM global_points; 

아마 완전히 잘못되었지만 내가 무엇을 할 수 있는지 잘 모르겠습니다.

감사

+0

정확히 "재사용 하시겠습니까?" 요점? ST_DWithin 결과? ST_Distance 결과? –

+0

@a_horse_with_no_name 포인트를 재사용하고 싶습니다. currPos – merlin371

+0

'currPos'는'global_points'의 컬럼입니까? –

답변

1

뷰 매개 변수를 가질 수 없습니다,하지만 당신이 할 수있는 집합 반환 함수를 만들 수 있습니다 라인을 따라

뭔가 :

create function testDis(currPos geography, latlong geography) 
    returns table(text, float) 
as $$ 
    SELECT name, ST_Distance($1, $2) 
    FROM global_points; 
$$ 
language sql; 

(미안 돈을 PostGIS를 알지 못해 데이터 유형이 잘못되었을 수도 있습니다.)

위 정의에서 다음과 같이 할 수 있습니다.

select * from testDis(foo, bar); 

여기서 foo 및 bar는 올바르게 입력 된 값입니다.

+0

그게 내가 찾고있는 것입니다 : D 감사합니다. – merlin371

관련 문제