1

我有一张包含用户列表的表格,看起来像;

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 时,我怎么能在子查询中使用它[如果最好的选择] ..?

任何帮助,非常感谢。

4

0 回答 0