sql - 使用 knex 从邮政编码中获取最近的地标
问题描述
我正在开发一个应用程序,该应用程序使用 knex 并利用一种算法,该算法从列表中返回 sql 表中最近的地标。
const getClosest = async (postcode) => {
const latLng = await getLatLngFromPostcode(postcode)
const landmark = await knex('landmarks')
.select(
knex.raw(
`title, address, postcode,
(
6371 * acos (
cos ( radians(:lat:) )
* cos( radians( ST_X(coordinate) ) )
* cos( radians( ST_Y(coordinate) ) - radians(:lng:) )
+ sin ( radians(:lat:) )
* sin( radians( ST_X(coordinate) ) )
)
) AS distance`, latLng,
),
)
.orderBy('distance')
.first()
delete landmark.distance
return landmark
}
^ 这将返回最近的地标。
如果我删除 .first() - 它会按顺序返回列表 - 但删除 landmark.distance 不会保留,并且此属性也生成为 null?
我发现这个算法有一个更长的版本,它是一个非 knex 版本,它可以让您更好地控制查询以返回基于距离<=特定英里的结果?
您将如何重新编写 knex 代码以使用此原始 sql 命令?
SELECT ROUND(6371 * acos(cos(radians('lat')) * cos(radians(latitude)) * cos(radians(longitude) - radians('long')) + sin(radians('lat')) * sin(radians(latitude)))) as distance,latitude,longitude, from your_table HAVING distance<=20 order by distance
我还应该对此查询设置限制以仅返回前 10 个结果吗?
解决方案
推荐阅读
- javascript - 自定义 Google 表单 HTML 上传文件按钮
- perl - Perl 打印匹配和来自 file1 的匹配字符串与 file2 匹配的无匹配字符串与百万条记录匹配
- node.js - 使用来自 Docker 的 env 变量的 React 连接被拒绝错误
- mysql - 为列的不同值附加其他记录的值
- django - 将 Django 模型数据保存到派生类的数据库中
- python-3.x - Pandas 应用函数 - args 它是如何传递的
- bash - 如果第一个第二和第三个字段相同,我如何使用排序或其他 bash cmd 从所有行中获取 1 行
- php - 在 Laravel 中使用 storeAs 重命名图像和上传失败
- parameter-passing - 参数被触发,即使它是可选的并且在 getopts 中提到
- r - R中的'stat_qq','geom_qq'和'qqnorm'函数有什么区别?