我有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");
在我继续问题之前,让我解释一下我的variables
和functions
。
calcDistance()
是一个函数,它返回2个纬度和经度的距离,实际上是登录用户和另一个用户的纬度和经度。通过的参数是logged in user latitude
,logged in user longitude
,second user latitude
和second user longitude
。
$mLat
是登录用户纬度的变量
$mLng
是登录用户经度的变量
lat
和lng
是MySQL数据库表中名为users
的列名。
现在我的主要目的是显示搜索结果,由最近的用户对搜索词进行排序。这是我在查询中使用calcDistance()
函数的原因。
第一个问题
当我运行此查询时,我得到一个Parse error: syntax error, unexpected '.'
。我不知道为什么我会收到这个错误。
第二个问题
我尝试直接传递数字作为参数,以便停止我从第一个问题得到的错误。但我仍然得到另一个错误Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
。
我的目标是根据最近的用户订购用户搜索。使用calcDistance()
返回登录用户和另一个用户之间的距离,就像我说的那样。
lat
和lng
列是保存每个用户纬度和经度的列
经过一些研究,我在这里回答https://gist.github.com/statickidz/8a2f0ce3bca9badbf34970b958ef8479
这应该粗略地对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
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;