将PHP函数添加到MySQL查询中

问题描述 投票:-3回答:1

我有2个问题来自此查询。

$query = mysql_query($con, "SELECT id, ".calcDistance($mLat, $mLng, ."lat"., ."lng".)." as distnc FROM users WHERE fName LIKE '%".$search."%' OR lName LIKE '%".$search."%' ORDER BY distnc");

在我继续问题之前,让我解释一下我的variablesfunctions

calcDistance()是一个函数,它返回2个纬度和经度的距离,实际上是登录用户和另一个用户的纬度和经度。通过的参数是logged in user latitudelogged in user longitudesecond user latitudesecond user longitude

$mLat是登录用户纬度的变量

$mLng是登录用户经度的变量

latlng是MySQL数据库表中名为users的列名。

现在我的主要目的是显示搜索结果,由最近的用户对搜索词进行排序。这是我在查询中使用calcDistance()函数的原因。

第一个问题

当我运行此查询时,我得到一个Parse error: syntax error, unexpected '.'。我不知道为什么我会收到这个错误。

第二个问题

我尝试直接传递数字作为参数,以便停止我从第一个问题得到的错误。但我仍然得到另一个错误Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given

我的目标是根据最近的用户订购用户搜索。使用calcDistance()返回登录用户和另一个用户之间的距离,就像我说的那样。

latlng列是保存每个用户纬度和经度的列

php mysqli
1个回答
0
投票

经过一些研究,我在这里回答https://gist.github.com/statickidz/8a2f0ce3bca9badbf34970b958ef8479

METHOD 1

这应该粗略地对MySQL中的距离项进行排序,并且应该在SQLite中工作。如果你需要对它们进行排序,你可以尝试使用毕达哥拉斯定理(a ^ 2 + b ^ 2 = c ^ 2)来得到精确的距离。

SELECT * FROM table ORDER BY ((lat-$user_lat)*(lat-$user_lat)) + ((lng - $user_lng)*(lng - $user_lng)) ASC

METHOD 2

SELECT id, (6371 * acos (cos ( radians($user_lat) )* cos(radians( lat ) ) * cos( radians( lng ) - radians($user_lng)) + sin ( radians($user_lat) ) * sin( radians( lat ) ))) AS distance FROM table HAVING distance < 30 ORDER BY distance LIMIT 0 , 20;
© www.soinside.com 2019 - 2024. All rights reserved.