我有一张包含用户列表的表格,看起来像;
Users.. ( id, username, lat, long )
我有一个位置表,如下所示:
Locations.. ( id, name, lat, lng, bound_ne_lat, bound_ne_lng, bound_sw_lat, bound_sw_lng
我正在尝试做的事情是这样的;
SELECT Users.*, Locations.name as NearestTown
FROM Users
INNER JOIN Locations ON ( .. lookup nearest town from Locations based on Users lat lng coords, return only the nearest result .. )
我确实考虑过做某种子查询,比如;
INNER JOIN Locatios ON Locations.id IN (SELECT id FROM Locations ORDER BY (..distance query) desc limit 1
但后来我发现我无法将用户 lat / lng 传递给每个结果的子查询。
但是,我用来计算两点之间距离的当前公式是;
(3956 * 2 * ASIN(SQRT( POWER(SIN((@sourceLat - table.lookupLat) * pi()/180 / 2), 2) +COS(@sourceLat * pi()/180) * COS(table.lookupLat * pi()/180) * POWER(SIN((@sourceLng - table.lookupLng) * pi()/180 / 2), 2) ))) as Distance,
但是,当我无法为每个结果传递@sourceLat 和@sourceLng 时,我怎么能在子查询中使用它[如果最好的选择] ..?
任何帮助,非常感谢。