Php 选择距离内的MySQL结果(以英里为单位);错误结果
晚上, 我有一个PHP脚本,它正在选择结果并尝试根据以英里为单位的特定距离过滤这些结果。我有一个结果数据库,其中包括从谷歌地图收集的经度和纬度数据 我的查询当前看起来像这样Php 选择距离内的MySQL结果(以英里为单位);错误结果,php,mysql,sql,where-clause,spatial,Php,Mysql,Sql,Where Clause,Spatial,晚上, 我有一个PHP脚本,它正在选择结果并尝试根据以英里为单位的特定距离过滤这些结果。我有一个结果数据库,其中包括从谷歌地图收集的经度和纬度数据 我的查询当前看起来像这样 $stmt=$pdo->prepare(“选择*, ((acos(sin(“$latitude”*pi()/180)) *sin((纬度*pi()/180)) +cos((“$latitude”*pi()/180)) *cos((纬度*pi()/180)) *cos(((“$longitude'-longitude)*pi(
$stmt=$pdo->prepare(“选择*,
((acos(sin(“$latitude”*pi()/180))
*sin((纬度*pi()/180))
+cos((“$latitude”*pi()/180))
*cos((纬度*pi()/180))
*cos(((“$longitude'-longitude)*pi()/180)))
*180/pi())*60*1.1515)作为距离
从目录
HAVING distanceMySQL从5.7版开始就支持空间函数,这可以减轻您键入如此复杂公式的负担。例如,您可以使用like so:
选择d.*,
st_距离_球体(点(纬度、经度)、点(纬度、经度))作为距离
从目录d
having distanceMySQL从5.7版开始就支持空间函数,这可以减轻您键入如此复杂公式的负担。例如,您可以使用like so:
选择d.*,
st_距离_球体(点(纬度、经度)、点(纬度、经度))作为距离
从目录d
还有距离,请注意查询中的SQL注入。@AWFULSALROCK您确定您的长acos sin函数是正确的,它看起来非常复杂,如果您不小心弄错了公式也不会奇怪……另外,请注意查询中的SQL注入。@AWFULSALROCK您确定您的长acos sin函数是正确的,它看起来非常复杂吗,如果你不小心弄错了公式,那就不奇怪了。。。
select d.*,
st_distance_sphere(point(latitude, longitude), point(:latitude, :longitude)) as distance
from directory d
having distance <= :distance * 1609.344
order by distance