php - 雄辩的haversine公式没有按预期工作
问题描述
我陷入了haversine公式,在我的情况下它仍然不起作用。
在以下示例中,我获取用户及其所有关系。我需要根据与搜索地址的距离来检索用户。按照下面的说明,我收到以下错误:未找到列:1054 Unknown column 'distance' in 'having clause'
“activity_latitude”和“activity_longitude”都存储在我开始获取数据的主用户表中。我做错了什么?
$q = self->whereNull("deleted_at")->where("group_id", 1)
->with([
"data",
"rating",
"pendingcontents",
"openinghours",
"openinghours.dayofweek",
"openinghoursexceptions",
"isopeningtime",
"contents",
"contents.translation",
]);
$q->selectRaw('( 3959 * acos( cos( radians(?) ) *
cos( radians( activity_latitude ) )
* cos( radians( activity_longitude ) - radians(?)
) + sin( radians(?) ) *
sin( radians( activity_latitude ) ) )
) AS distance', [$geocodedAddress[0], $geocodedAddress[1], $geocodedAddress[0]])
->havingRaw("distance < ?", [$radius]);
然后我还需要按距离订购。
综上所述,我只需要根据距离取值,按距离排序。
我不明白为什么这个版本有效......使用相关表格及其坐标
$q->whereHas('businessdata', function ($q) use ($filtro, $geocodedAddress, $radius) {
$q->selectRaw('( 3959 * acos( cos( radians(?) ) *
cos( radians( activity_latitude ) )
* cos( radians( activity_longitude ) - radians(?)
) + sin( radians(?) ) *
sin( radians( activity_latitude ) ) )
) AS distance', [$geocodedAddress[0], $geocodedAddress[1], $geocodedAddress[0]])
->havingRaw("distance < ?", [$radius]);
});
解决方案
您分配了一个别名(距离)。
您可以简单地使用orderBy()
from
https://laravel.com/docs/5.8/queries#ordering-grouping-limit-and-offset
这将允许您使用距离别名。IE
$q->selectRaw('( 3959 * acos( cos( radians(?) ) *
cos( radians( activity_latitude ) )
* cos( radians( activity_longitude ) - radians(?)
) + sin( radians(?) ) *
sin( radians( activity_latitude ) ) )
) AS distance', [$geocodedAddress[0], $geocodedAddress[1], $geocodedAddress[0]])
->havingRaw("distance < ?", [$radius])
->orderBy("distance");
您还可以为方向传递第二个可选参数(默认为“asc”)。
推荐阅读
- excel - 使用vba删除列表框中的选定项目
- web-scraping - 如何更新 python 抓取的有效负载信息
- javascript - 无法使用 web3.eth.accounts.wallet.encrypt
- python - 使用多线程或多处理同时从串口读取数据
- flutter - 如何在颤动中制作刷新页面按钮?
- java - 如何检查设备是否启用谷歌移动服务?
- node.js - Nginx 配置用于将 Wordpress 设置为主页但 /listing 来自节点的页面
- pdf - 转换 - GLTF/STL/OBJ 文件格式为 PDF 页面的 U3D 文件
- python - re.split 删除输入文本预处理中的 url
- flutter - 带有条件 Flutter 的 TextFormField