0

请帮助我,我不明白这个查询中的 3959 是什么以及这个查询的逻辑是什么。

$sql = 'SELECT `Zip`, `City`, `State`, `Lat`, `Long`, 
( 3959 * acos( cos( radians("%s") ) * cos( radians( `Lat` ) ) * cos( radians( `Long` ) -    
radians("%s") ) + sin( radians("%s") ) * sin( radians( `Lat` ) ) ) ) AS distance 
FROM Zips 
HAVING distance < "%s"
ORDER BY distance LIMIT 0 , 2';
4

2 回答 2

4

3959 是以英里为单位的地球半径。该查询正在计算输入的经度和纬度与表中点的经度和纬度之间的距离(以英里为单位),并选择最接近的。没有那么多逻辑,它是纯粹的数学。鉴于距离本身没有输出,您甚至可以不用乘以 3959,仍然得到相同的结果。

于 2012-12-10T06:28:26.963 回答
1

此逻辑是使用经纬度查找位置,请参考使用 MySQL 查找位置

上述逻辑使用Haversine 公式来查找球体内的位置

于 2012-12-10T06:28:08.157 回答