【发布时间】:2015-07-08 00:28:22
【问题描述】:
我有一个包含不同位置的数据库,每个位置都有自己的经度和纬度变量。我希望能够使用我制作的一个距离函数,它在我的 WHERE 语句中返回两个经度和纬度之间的距离。所以我正在寻找两点之间的距离,如果它小于我正在搜索的半径,它会通过 WHERE 语句。
距离函数:
function distance($lat1, $lon1, $lat2, $lon2) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
return $miles;
}
在我的 SELECT 语句中,我想要这样的东西:
SELECT * FROM Locations WHERE distance($latitude, $longitude, 'latitude', 'longitude')
但是这不起作用。 我已经尝试过这些没有任何运气...
"SELECT * FROM Locations WHERE distance($latitude, $longitude, 'latitude', 'longitude') < $radius"
和
sprintf("SELECT * FROM Locations WHERE %f < $radius", distance($latitude, $longitude, 'latitude', 'longitude'))
这甚至可以预成型吗?如果不是什么是解决这个问题的好方法?谢谢!
编辑:我试着做
"SELECT * FROM Locations WHERE '" . distance('Latitude', 'Longitude', $latitude, $longitude) . "' < $radius"
但它不起作用,但是如果我只是回显它,它会输出我正在寻找的结果。但是当我尝试在 mysqli_query 中使用它时它不能正常工作
【问题讨论】:
-
您的距离函数需要返回一个值,然后您将其添加到查询中
-
distance 返回两点之间的距离。我应该把剩下的功能放在那里吗?
-
我认为这只是一个 pp 字符串连接问题
$fooo='text'.my_function_output().'more text';my_function_output() 需要在 $foo 中返回你想要的字符串 -
a php function inside a mysql query? 的可能重复项(不,你不能。你也许可以制作一个存储过程。否则做一个往返。注意 SQLite 可以很容易地回调 PHP 函数,因为它运行在相同的过程。)