2015-04-15 53 views
2

我有一個查詢,選擇一個GPS英里半徑30英里內的所有位置。我想獲取這些位置的ID,但它也會返回距離中心點的距離。SQL查詢和計算;正確格式化查詢以選擇唯一ID

無論如何要執行距離計算而不返回它嗎?

查詢:

SELECT id, 3956 * 2 * ASIN(SQRT(
    POWER(SIN((34.1844709 - abs(dest.lat)) * pi()/180/2), 
    2) + COS(37.7749295 * pi()/180) * COS(abs(dest.lat) * 
    pi()/180) * POWER(SIN((-118.131809 - dest.lng) * 
    pi()/180/2), 2))) as distance 
FROM location dest 
having distance < 30 
ORDER by distance 
LIMIT 30 

輸出:基於

--------------------------- 
id | distance 
--------------------------- 
1 | 2.310 
2 | 2.356 
17 | 4.298 

查詢關: http://www.notaires.fr/sites/default/files/geo_searchjkkjkj_0.pdf

+0

是,剛剛過去的計算,而不是別名'distance' –

+1

@juergend當然,你必須把計算入'ORDER BY'條款,以及如果你這樣做。將這個包裝在僅查詢該結果集的「id」列的外部查詢中可能更有意義。 –

回答

5

可你只是做另一個選擇這個?

Select id 
From (SELECT id, 3956 * 2 * ASIN(SQRT(
    POWER(SIN((34.1844709 - abs(dest.lat)) * pi()/180/2), 
    2) + COS(37.7749295 * pi()/180) * COS(abs(dest.lat) * 
    pi()/180) * POWER(SIN((-118.131809 - dest.lng) * 
    pi()/180/2), 2))) as distance 
FROM location dest 
having distance < 30 
ORDER by distance 
LIMIT 30) dst 
+0

您的第二個查詢中未定義「distance」。我認爲第一個是要走的路。 –

+0

是的,同意,實際上我們可以按順序重複公式,但是我會和第一個一起去,所以刪除第二個版本 –