在我的网站上,我正在尝试获取附近的位置。
我正在尝试为此使用Haversine 公式。
我正在使用以下查询来获取 25 公里半径内的所有位置。
SELECT id, ( 6371 * acos( cos( radians(51.8391) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(4.6265) ) + sin( radians(51.8391) ) * sin( radians( lat ) ) ) ) AS distance
FROM shops
HAVING distance < 25
ORDER BY name asc
但是我认为某些功能可能只是 MySQL,因为我收到以下错误:
警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42883]: Undefined function: 7 ERROR: function radians(text) does not exist LINE 1: ...id, ( 6371 * acos( cos( radians( 51.8391) ) * cos( radians( l... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。在 ...
或者也许这与我必须更改lat
查询中的文本有关。但我不知道它应该是什么。
51.8391 和 4.6265 是我的“起点”点的经纬度。
非常感谢任何帮助,因为我不知道要改变什么:-)
编辑
看起来问题出在我尝试做的地方:radians(lat)
.
lat 是我表中的一列。
当我尝试使用rad()
hakre 建议时,错误更改为:function rad(numeric) does not exist
编辑 2
现在我们正在取得进展。
确实设置为文本的列的数据类型(如 mu 所建议的那样太短)。
我已将其更改为双精度。
但是现在我得到另一个错误:
警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42703]: Undefined column: 7 ERROR: column "distance" does not exist LINE 1: ...adians( lat ) ) ) AS distance from stores HAVING距离 <... ^ 在 ...
但我以为我在选择中做了一个别名。有任何想法吗?
另外,如果你们认为这应该进入另一个问题,请告诉我,我会关闭这个问题。