首次发布时,我会尽量遵守最佳做法。对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