public static function rsine($coordinates)
{
return '(6371 * acos(cos(radians(' . $coordinates['latitude'] . '))
* cos(radians(`lat`))
* cos(radians(`lng`)
- radians(' . $coordinates['longitude'] . '))
+ sin(radians(' . $coordinates['latitude'] . '))
* sin(radians(`lat`))))';
}
输出:
“message”:“SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在'*附近使用正确的语法,(6371 * acos (cos(弧度(28.392200))\ n * cos(弧度(
lat
))\ n * cos(第1行的ra'(SQL:select * fromusers
where exists(select *,*,(6371 * acos(cos((弧度(28.392200))\ n * cos(弧度(lat
))\ n * cos(弧度(lng
)\ n - 弧度(77.320801))\ n + sin(弧度(28.392200))\ n * sin(弧度(lat
) ))))距离locations
的距离users
.location_id
=locations
.id
和(6371 * acos(cos(弧度(28.392200))\ n * cos(弧度(lat
))\ n * cos(弧度(lng
)\ n - 弧度(77.320801))\ n + sin(弧度(28.392200))\ n * sin(弧度(lat
))))<8.04672顺序由distance
asc)和users
.deleted_at
为空)“,
首先,如果你在这个平台上寻求帮助,下次尝试制定更像是一个问题。
其次,直接在您的查询中集成变量永远不是一个好主意。这将使您的查询可以进行sql注入。基础知识可以找到here。
通过查看您的查询(在错误中),我们可以看到您将使用*
通配符两次获取所有列。
select
*
from
users
where
exists (
select
*,
*, <-- This will throw a syntax error.
(6371 * acos(co ... the rest of the distance calculation
将方法命名为scopeRsine()会很好。但是不要为此使用mysql。请改用php。在这里查看我的回复:https://stackoverflow.com/a/50040011/1262144