2011-10-09 71 views
1

我有以下表與MySQL數據庫SQL位置查詢

int - id 
float 2,6 - long 
float 2,6 - lat 
int - radius 

我想創建一個SQL查詢返回從給定的位置ID &距離(長& LAT)

我發現下面這段代碼的工作原理:

SELECT id, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * 
cos(radians(lng) - radians(-122)) + sin(radians(37)) * 
sin(radians(lat)))) AS distance FROM markers 
HAVING distance < 25 ORDER BY distance LIMIT 0 , 20; 

我想改變這個查詢只返回行,其中的計算長度小於半徑(我列表中的一列) 用半徑代替25不起作用。 有沒有辦法實現,而不使用兩個SQL查詢?

+0

請用一個例子解釋..你的問題是不明確 – diEcho

回答

1

問題發生,因爲結果distance浮動和半徑是整數數據類型,所以你需要轉換半徑浮動。試試下面

SELECT id, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * 
cos(radians(lng) - radians(-122)) + sin(radians(37)) * 
sin(radians(lat)))) AS distance FROM markers 
HAVING distance < CAST (radius AS float) ORDER BY distance LIMIT 0 , 20; 

樂於幫助:)