我在尝试发出与位置有关的数据库请求时遇到问题

Posted

技术标签:

【中文标题】我在尝试发出与位置有关的数据库请求时遇到问题【英文标题】:I have a problem trying to make a database request that has to do with location 【发布时间】:2021-11-18 10:26:40 【问题描述】:

,我正在使用 google api 获取地理位置,我的想法是从最近到最远进行排序,但我得到了一个错误,我不知道如何解决它

$barbers = Barber::select(Barber::raw('*, SQRT(
                    POW(69.1 * (latitude - '.$lat.'), 2 + 
                    POW(69.1 * ('.$lng.' - longitude) * COS(latitude / 57.3), 2)) AS distance'))
                    ->orderBy('distance', 'ASC')
                    ->get();

Illuminate\Database\QueryException: SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 3 行的 'from barbers order by distance asc' 附近使用正确的语法(SQL:select *, SQRT( POW(69.1 * (纬度 - -23.5630907), 2 + POW(69.1 * (-46.6682795 - longitude) * COS(latitude / 57.3), 2)) AS 距离 barbers order by distance asc) 在文件 C:\xampp\htdocs\ApiDevBarber\vendor\laravel\framework \src\Illuminate\Database\Connection.php 在第 692 行

【问题讨论】:

【参考方案1】:

您缺少右括号。应该是:

$barbers = Barber::select(Barber::raw('*, SQRT(
                POW(69.1 * (latitude - '.$lat.'), 2 + 
                POW(69.1 * ('.$lng.' - longitude) * COS(latitude / 57.3), 2))) AS distance'))
                ->orderBy('distance', 'ASC')
                ->get();

您是否尝试使用毕达哥拉斯的c = sqrt(a^2 + b^2) 公式?您使用的公式类似于c = sqrt(a^(b^2))

【讨论】:

不行,你有什么解决方案? @PedroGonçalves 你还会遇到同样的错误吗?

以上是关于我在尝试发出与位置有关的数据库请求时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志

C++ WinInet 只发出 1 个请求

通过 Expo 向 localhost 发出 HTTP 请求

如何在反应中使用 axios 发出 POST 请求?

在颤振中发出 http.get() 请求的问题

当我尝试使用 Tomcat 服务器在 java servlet 中发送 GET 请求时,我在实例化 servlet 类时遇到错误