2016-07-30 76 views
-1

嘿,有沒有一種方法可以按距離順序得到最近10個目的地的列表,我的MySQL數據庫有用戶和地點的經度和緯度。我不想指定用戶和地點之間的距離,也就是沒有最大或最小距離,只是我需要的最接近的10個地方。用戶和地點都共享同一個表。距離他們的距離順序最近的10個目的地

+0

yes - 這是可能的 – RamRaider

+0

有,但它很慢....你可以通過指定一個邊界框,並使用不斷增加的邊界框執行一系列查詢來提高效率,直到你有10個條目 –

+0

我寫了10例如,實際上我至少需要100,所以它不是一個好主意我猜:( –

回答

2

可以使用半正矢公式:

SELECT t.*, (6371 * ACOS(COS(RADIANS(lat_user)) * COS(RADIANS(lat)) * 
      COS(RADIANS(lng) - RADIANS(lng_user)) + SIN(RADIANS(lat_user)) * 
      SIN(RADIANS(lat)))) AS distance -- distance in kilometers 
FROM yourTable 
ORDER BY distance ASC 
LIMIT 10 

在上述查詢我假定lat_userlng_user是用戶的緯度和經度。並且latlng是給定地點(記錄)的經度和緯度。

閱讀this SO question瞭解更多信息。

+0

除了這將通過每一個單進入數據庫表....這將使它非常,非常慢... Haversine是一個昂貴的,緩慢的公式計算 –

+0

我沒有通過拉特和長的地方,我必須從數據庫中獲取位置 –

+0

@MarkBaker是的,對於擁有頻繁用戶或許多用戶的大型數據庫來說,這不會很好地擴展。但是對於數百或數千條記錄來說,它應該是可行的。長期來看,某種地理分區是更好的方式。 –