首次發佈時,我會盡量遵守最佳做法。對MySQL列數據進行分組
我試圖構建一個用於測量用戶位置的MySQL查詢(分別表示爲緯度和經度爲$Lat
和$Lng
的查詢)。查詢應該返回距離用戶最近的50個電臺。
問題是我的表中的數據包含每個站的位置入口每個站我只需要每個站最近的站入口!
這是我的查詢:
SELECT id, lat, lng, station_name, routes,
(3959 * acos(cos(radians($Lat))
* cos(radians(lat)) * cos(radians(lng) -
radians($Lng)) + sin(radians($Lat)) * sin(radians(lat)))) AS distance
FROM subway_stations ORDER BY distance LIMIT 0 , 50;
上述MySQL查詢完成以下操作:
- 選擇從ID,緯度,經度,站的班次數據和路線
- 測量每個站點的lat和lng與用戶的數據 - 將該數據存儲爲'distance'
- 返回50個最近的結果
我需要組這些結果在一起,使得每個站只有一個記錄被返回,所述一個隨着距離列中的最低值,這是最接近用戶站入口。
我試過使用GROUP BY
但我似乎正在實施它不正確,因爲返回的結果不是所需的。
如果您向查詢添加了「group by station_name,id,lat,lng」,它基本上與根本不分組相同。 –
我假設'station_name'唯一定義了'id','lat','lng','id'作爲可能的主鍵。但重讀原來的問題,似乎'id'可能是指個人入口。所以你可能是對的。我正在重新考慮。 – Pursuit
@Sam看起來你的回答是正確的。你只需要添加'order by'和'limit'子句來回答原來的問題。 (我的名聲還不夠高,無法對你的問題發表評論)。 – Pursuit