2016-06-27 36 views
0

我有一個查詢,看起來像這樣重構SQL查詢:使用PostGIS的功能

SELECT *, 
     ST_Distance(
      ST_GeographyFromText('SRID=4326;POINT(' || users.longitude || ' ' || users.latitude || ')'), 
      ST_GeographyFromText('SRID=4326;POINT(-84.334078 45.273343)')) as distance 
     FROM users 
     WHERE ST_DWithin(
      ST_GeographyFromText('SRID=4326;POINT(' || users.longitude || ' ' || users.latitude || ')'), 
      ST_GeographyFromText('SRID=4326;POINT(-84.334078 45.273343)'), 
      2000 
     ) 
     ORDER BY distance ASC;" 

我已經看到一些重複這裏。我想知道有什麼方法可以使這個查詢更具可讀性嗎?

回答

1

橫向聯接:

select *, ST_Distance(a, b) distance 
from 
    users, 
    ST_GeographyFromText('SRID=4326;POINT(' || users.longitude || ' ' || users.latitude || ')') a, 
    ST_GeographyFromText('SRID=4326;POINT(-84.334078 45.273343)') b 
where ST_DWithin(a, b, 2000) 
order by distance asc;